From: Aleksandr V. <ale...@gm...> - 2010-10-31 07:05:22
|
Hello all! I was confused trying to get error stream (stderr) from the EXT:RUN-SHELL-COMMAND, CLISP. I have Allegro CL for comparison and it has an argument :error-output, how I can do it in CLISP? With best wishes, Aleksandr. |
From: Sam S. <sd...@gn...> - 2010-11-01 03:48:44
|
> * Aleksandr Vinokurov <nyrxfnaqe.iva@tznvy.pbz> [2010-10-31 00:34:38 +0400]: > > I was confused trying to get error stream (stderr) from the > EXT:RUN-SHELL-COMMAND, CLISP. please try the appended patch. (ext:run-shell-command ... :error "foo") -- Sam Steingold (http://sds.podval.org/) on Ubuntu 10.04 (lucid) http://palestinefacts.org http://pmw.org.il http://www.memritv.org http://openvotingconsortium.org http://camera.org http://thereligionofpeace.com Warning! Dates in calendar are closer than they appear! --- runprog.lisp.~1.15.~ 2008-12-13 22:58:20.000000000 -0500 +++ runprog.lisp 2010-10-31 23:47:05.000000000 -0400 @@ -115,6 +115,15 @@ ) qstring ) ) + (to-string (object if-exists) + (setq object (xstring object)) + (when (and (eq if-exists ':ERROR) (probe-file object)) + (setq object (pathname object)) + (error-of-type 'file-error + :pathname object + (TEXT "~S: File ~S already exists") + 'run-shell-command object)) + object) ; conversion to a string that works for a pathname as well (xstring (object) (if (pathnamep object) @@ -134,6 +143,8 @@ ) ) ) ) (defun run-shell-command (command &key (input ':terminal) (output ':terminal) (if-output-exists ':overwrite) + (error ':terminal) + (if-error-exists ':overwrite) (wait t) #+UNIX (may-exec nil) #+WIN32 (indirectp t) @@ -151,17 +162,8 @@ ((:TERMINAL :STREAM) ) (t (if (eq output 'NIL) (setq output #+UNIX "/dev/null" #+WIN32 "nul" - if-output-exists ':OVERWRITE - ) - (progn - (setq output (xstring output)) - (when (and (eq if-output-exists ':ERROR) (probe-file output)) - (setq output (pathname output)) - (error-of-type 'file-error - :pathname output - (TEXT "~S: File ~S already exists") - 'run-shell-command output - ) ) ) ) + if-output-exists ':OVERWRITE) + (setq output (to-string output if-output-exists))) (setq command (string-concat command (ecase if-output-exists @@ -172,6 +174,22 @@ ) ) #+WIN32 (setq indirectp t) ) ) + (case error + ((:TERMINAL :STREAM) ) + (t (if (eq error 'NIL) + (setq error #+UNIX "/dev/null" #+WIN32 "nul" + if-error-exists ':OVERWRITE) + (setq error (to-string error if-error-exists))) + (setq command + (string-concat command + (ecase if-error-exists + ((:OVERWRITE :ERROR) " 2> ") + (:APPEND " 2>> ") + ) + (shell-quote error) + ) ) + #+WIN32 (setq indirectp t) + ) ) #-WIN32 (unless wait (setq command (string-concat command " &"))) |
From: Aleksandr V. <ale...@gm...> - 2010-11-03 20:45:02
|
Sam Steingold <sd...@gn...> writes: >> * Aleksandr Vinokurov <nyrxfnaqe.iva@tznvy.pbz> [2010-10-31 00:34:38 +0400]: >> >> I was confused trying to get error stream (stderr) from the >> EXT:RUN-SHELL-COMMAND, CLISP. > > please try the appended patch. > > (ext:run-shell-command ... :error "foo") Thanks for your response. But this patch adds only simple dumping to the "foo" file on the current directory. I was talking about stream (ext:run-shell-command ... :error :stream) and multiple values when (ext:run-shell-command ... :output :stream :error :stream). Actually it would be great, but if it is a lot of work, then I suppose I can make a workaround with the temp file and with-open-file (it will be a large bypass, I think, because of synchronizing the process and the file...). I'm sorry, I'm rather novice in Lisp so it may take me some time to figure out this workaround, thats why, I repeat: it would be a great plus to get :error :stream working in multiple values. With best wishes, Aleksandr. |
From: Sam S. <sd...@gn...> - 2010-11-03 22:10:37
|
there is a function ext::launch which is supposed to supersede (eventually) all the other shell functions. I think it still needs some work, but I don't remember what. at any rate, try (launch "/bin/sh" :arguments '("-c" ...) :error :stream) -- Sam Steingold (http://sds.podval.org/) on Ubuntu 10.04 (lucid) http://palestinefacts.org http://pmw.org.il http://jihadwatch.org http://mideasttruth.com http://ffii.org http://thereligionofpeace.com People with a good taste are especially appreciated by cannibals. |