From: Elliott S. <ell...@gm...> - 2009-06-14 03:43:17
|
Hi, I am trying to understand how the :pty option to run-program works. What I would like is to run a program using a pty and have the child inherit all of the parent's streams. When I try to run cat for example, I get * (run-program "cat" nil :pty t :input t :output t :error t) #<SB-IMPL::PROCESS :EXITED 1> Is this not the correct way to make the child inherit from the parent? Or will I have to write some code to pass data back and forth from the standard streams and the pty? Also, when I pass :pty *standard-output*, I get the following error (tested on Linux/SBCL 1.0.20 and Mac/SBCL 1.0.25): * (run-program "cat" nil :pty *standard-output* :input t :output t :error t) debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR: invalid number of arguments: 3 Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB-IMPL::COPY-DESCRIPTOR-TO-STREAM 7 #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {100FCD09}> (0))[:EXTERNAL] Thanks. Any assistance would be appreciated. -- Elliott Slaughter "Don't worry about what anybody else is going to do. The best way to predict the future is to invent it." - Alan Kay |
From: Stas B. <sta...@gm...> - 2009-06-14 09:04:22
Attachments:
run-program.diff
|
Elliott Slaughter <ell...@gm...> writes: > Hi, > > Also, when I pass :pty *standard-output*, I get the following error (tested on Linux/SBCL 1.0.20 and Mac/SBCL 1.0.25): > > * (run-program "cat" nil :pty *standard-output* :input t :output t :error t) > > debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR: > invalid number of arguments: 3 > > Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. > > restarts (invokable by number or by possibly-abbreviated name): > 0: [ABORT] Exit debugger, returning to top level. > > (SB-IMPL::COPY-DESCRIPTOR-TO-STREAM > 7 > #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {100FCD09}> > (0))[:EXTERNAL] > That's a bug, attached patch should fix it. |
From: Nikodemus S. <nik...@ra...> - 2009-06-15 11:06:37
|
2009/6/14 Stas Boukarev <sta...@gm...>: > That's a bug, attached patch should fix it. Merged as 1.0.29.8, thank you! Cheers, -- Nikodemus |
From: Elliott S. <ell...@gm...> - 2009-06-15 03:49:48
|
Thanks, that gets rid of the error. I'm still confused as to what to expect when using the :pty option. If I try the following, I just get the exited process, and process-pty is bound to a stream with no input. * (run-program "echo" (list "hello world") :pty *standard-output* :input t :output t :error t) #<SB-IMPL::PROCESS :EXITED 1> * (process-pty *) #<SB-SYS:FD-STREAM for "descriptor 7" {11C11D29}> * (read-line * nil nil) NIL T >From the manual, I would expect the output from echo to go to *standard-output*. "If :pty is a stream, all output to this pty is sent to this stream." I get identical results when I try (run-program ... :pty t ...) How am I supposed to use this pty to get the output? Thanks. On Sun, Jun 14, 2009 at 2:04 AM, Stas Boukarev <sta...@gm...> wrote: > Elliott Slaughter <ell...@gm...> writes: > > > Hi, > > > > Also, when I pass :pty *standard-output*, I get the following error > (tested on Linux/SBCL 1.0.20 and Mac/SBCL 1.0.25): > > > > * (run-program "cat" nil :pty *standard-output* :input t :output t :error > t) > > > > debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR: > > invalid number of arguments: 3 > > > > Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. > > > > restarts (invokable by number or by possibly-abbreviated name): > > 0: [ABORT] Exit debugger, returning to top level. > > > > (SB-IMPL::COPY-DESCRIPTOR-TO-STREAM > > 7 > > #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {100FCD09}> > > (0))[:EXTERNAL] > > > That's a bug, attached patch should fix it. > > > > > -- > With best regards, Stas. > > -- Elliott Slaughter "Don't worry about what anybody else is going to do. The best way to predict the future is to invent it." - Alan Kay |
From: Nikodemus S. <nik...@ra...> - 2009-06-15 10:52:04
|
2009/6/15 Elliott Slaughter <ell...@gm...>: > Thanks, that gets rid of the error. > > I'm still confused as to what to expect when using the :pty option. If I try > the following, I just get the exited process, and process-pty is bound to a > stream with no input. The no-input part is expected: output capturing to the stream is done by copying. As for the rest, I suspect the problem is with finding "echo": (run-program "echo" '("hello") :pty *standard-output* :search t) ; note :SEARCH T works here given Stas' patch. In the current implementation not finding the program to run is unfortunately hard to tell apart from a "normal" exist status 1. Cheers, -- Nikodemus |