[slime-devel] Fwd: sbcl run-program output

Robert Brown robert.brown at gmail.com
Sun Mar 1 16:59:25 UTC 2009


When I use SBCL's run-program function to run a Unix command from the Slime
REPL and the command produces a lot of output, I get a run time error.  A
sample acktrace is included below.  Examples are:

(sb-ext:run-program "/bin/cat" '("/etc/bash_completion")
                   :output *terminal-io* :search t :wait t)

or

(sb-ext:run-program "/bin/cat" '("/etc/bash_completion")
                   :output *standard-output* :search t :wait t)

If I collect the output into a string and then print the string, everything
works fine:

(progn
 (princ
  (with-output-to-string (out)
    (sb-ext:run-program "/bin/cat" '("/etc/bash_completion")
                        :output out :search t :wait t))
  *terminal-io*)
 nil)

My goal is to see the command's output as it's generated.  Does anyone know
how to do this?

bob

====================

non-empty buffer when EOF reached while reading from child: #(99
                                                             117
                                                             114
                                                             32
                                                             41
                                                             32
                                                             41
                                                             10
                                                             9
                                                             9
                                                             ...)
  [Condition of type SIMPLE-ERROR]

Restarts:
 0: [ABORT] Abort sending output to Emacs.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [ABORT] Return to SLIME's top level.
 3: [ABORT] Exit debugger, returning to top level.

Backtrace:
 0: ((LAMBDA (SB-IMPL::FD)) #<unavailable argument>)
 1: (SB-IMPL::SUB-SUB-SERVE-EVENT 0 200000)
 2: (SB-IMPL::SUB-SERVE-EVENT 0 200000 NIL)
 3: ((LAMBDA (SWANK-BACKEND::STREAMS &OPTIONAL
SWANK-BACKEND::TIMEOUT)) (#<SB-SYS:FD-STREAM for "a socket"
{B36B031}>) NIL)
 4: (SWANK::WAIT-FOR-EVENT/EVENT-LOOP (:EMACS-PONG 16) NIL)
 5: (SWANK::WAIT-FOR-EVENT (:EMACS-PONG 16) NIL)
 6: (SWANK::SEND-USER-OUTPUT ..)
 7: ((LAMBDA ()))
 8: ((LAMBDA ()))
 9: ((SB-PCL::FAST-METHOD STREAM-FINISH-OUTPUT
(SWANK-BACKEND::SLIME-OUTPUT-STREAM)) #(3 NIL 2 NIL 5 NIL ...)
#<unavailable\
 argument> #<SWANK-BACKEND::SLIME-OUTPUT-STREAM {AAB0BF1}>)
 10: ((LAMBDA ()))
 11: ((SB-PCL::FAST-METHOD STREAM-WRITE-STRING
(SWANK-BACKEND::SLIME-OUTPUT-STREAM T)) ..)
 12: (SB-IMPL::%WRITE-STRING ..)
 13: ((LAMBDA (SB-IMPL::FD)) #<unavailable argument>)
 14: (SB-IMPL::SUB-SUB-SERVE-EVENT 1 0)
 15: (SB-IMPL::SUB-SERVE-EVENT 1 0 NIL)
 16: (SB-SYS:SERVE-ALL-EVENTS 1)
 17: (PROCESS-WAIT #<SB-IMPL::PROCESS 9630 :SIGNALED> NIL)
 18: (RUN-PROGRAM "/bin/cat" ("/etc/bash_completion"))[:EXTERNAL]
 19: (SB-INT:SIMPLE-EVAL-IN-LEXENV (RUN-PROGRAM "/bin/cat"
'("/etc/bash_completion") :OUTPUT *STANDARD-OUTPUT* :SEARCH ...) \
#<NULL-LEXENV>)
 20: (SWANK::EVAL-REGION "(sb-ext:run-program \"/bin/cat\"
'(\"/etc/bash_completion\") :output *standard-output* :search t :\
wait t)\n")
 21: ((LAMBDA ()))
 22: (SWANK::TRACK-PACKAGE #<CLOSURE (LAMBDA #) {B05A8AD}>)
 23: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation
request." #<CLOSURE (LAMBDA #) {B05A83D}>)
 24: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA #) {B05A825}>)
 25: (SWANK::REPL-EVAL "(sb-ext:run-program \"/bin/cat\"
'(\"/etc/bash_completion\") :output *standard-output* :search t :wa\
it t)\n")




More information about the slime-devel mailing list