|
From: Teemu L. <tli...@ik...> - 2010-04-25 08:24:34
|
I'm trying to pipe my program's output to Linux's "head" command but I
get "broken pipe" errors (see the backtrace below). I'm using SBCL
1.0.37.60. Here's a test script which runs "ls -la" command and prints
its output to stdout:
#!/home/dtw/local/bin/sbcl --script
(defun run-program-stream (program &rest arguments)
(sb-ext:process-output
(sb-ext:run-program program arguments :output :stream :search t)))
(with-open-stream (s (run-program-stream "ls" "-la"))
(loop for line = (read-line s nil)
while line
do (format t "~A~%" line)))
Running the script with "./program | head" prints the first lines of the
output but also gives me the following error:
--8<---------------cut here---------------start------------->8---
unhandled SB-INT:SIMPLE-STREAM-ERROR in thread #<SB-THREAD:THREAD
"initial thread" RUNNING
{A9F0A19}>:
Couldn't write to #<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>:
Broken pipe
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {AA793CD}>)[:EXTERNAL]
1: (BACKTRACE 128 #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDERR* {90BF8F9}>)
2: (SB-DEBUG::DEBUGGER-DISABLED-HOOK
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AA777A9}>
#<unavailable argument>)
3: (SB-DEBUG::RUN-HOOK
*INVOKE-DEBUGGER-HOOK*
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AA777A9}>)
4: (INVOKE-DEBUGGER #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AA777A9}>)
5: (ERROR SB-INT:SIMPLE-STREAM-ERROR)[:EXTERNAL]
6: (SB-IMPL::SIMPLE-STREAM-PERROR
"Couldn't write to ~s"
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
32)
7: (SB-IMPL::OUTPUT-CHAR-UTF-8-LINE-BUFFERED
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
#\Newline)
8: ((LAMBDA (&REST REST))
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
#\Newline)
9: ((LAMBDA (&REST REST))
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
#\Newline)[:OPTIONAL]
10: (WRITE-CHAR #\Newline #<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>)
11: (TERPRI #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {910CD19}>)
12: ((LAMBDA ()))
13: (SB-INT:SIMPLE-EVAL-IN-LEXENV
(WITH-OPEN-STREAM (S (RUN-PROGRAM-STREAM "ls" "-la"))
(LOOP FOR LINE = (READ-LINE S NIL)
WHILE LINE
DO (FORMAT T "~A~%" LINE)))
#<NULL-LEXENV>)
14: (SB-FASL::LOAD-AS-SOURCE
#<SB-SYS:FD-STREAM for "file /home/dtw/tmp/lisp-koe.lisp" {A9F47E9}>
NIL
NIL)
15: ((FLET SB-FASL::LOAD-STREAM)
#<SB-SYS:FD-STREAM for "file /home/dtw/tmp/lisp-koe.lisp" {A9F47E9}>
NIL)
16: (LOAD #<SB-SYS:FD-STREAM for "file /home/dtw/tmp/lisp-koe.lisp" {A9F47E9}>)[:EXTERNAL]
17: (SB-IMPL::PROCESS-SCRIPT "./lisp-koe.lisp")
18: (SB-IMPL::TOPLEVEL-INIT)
19: ((LABELS SB-IMPL::RESTART-LISP))
unhandled condition in --disable-debugger mode, quitting
unhandled SB-INT:SIMPLE-STREAM-ERROR in thread #<SB-THREAD:THREAD
"initial thread" RUNNING
{A9F0A19}>:
Couldn't write to #<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>:
Broken pipe
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {AAA2B45}>)[:EXTERNAL]
1: (BACKTRACE 128 #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDERR* {90BF8F9}>)
2: (SB-DEBUG::DEBUGGER-DISABLED-HOOK
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAA1699}>
#<unavailable argument>)
3: (SB-DEBUG::RUN-HOOK
*INVOKE-DEBUGGER-HOOK*
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAA1699}>)
4: (INVOKE-DEBUGGER #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAA1699}>)
5: (ERROR SB-INT:SIMPLE-STREAM-ERROR)[:EXTERNAL]
6: (SB-IMPL::SIMPLE-STREAM-PERROR
"Couldn't write to ~s"
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
32)
7: (FORCE-OUTPUT #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {910CD19}>)
8: (SB-INT:FLUSH-STANDARD-OUTPUT-STREAMS)
9: (SB-IMPL::PROCESS-SCRIPT "./lisp-koe.lisp")
10: (SB-IMPL::TOPLEVEL-INIT)
11: ((LABELS SB-IMPL::RESTART-LISP))
unhandled condition in --disable-debugger mode, quitting
unhandled SB-INT:SIMPLE-STREAM-ERROR in thread #<SB-THREAD:THREAD
"initial thread" RUNNING
{A9F0A19}>:
Couldn't write to #<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>:
Broken pipe
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {AAB41A5}>)[:EXTERNAL]
1: (BACKTRACE 128 #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDERR* {90BF8F9}>)
2: (SB-DEBUG::DEBUGGER-DISABLED-HOOK
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAB2E19}>
#<unavailable argument>)
3: (SB-DEBUG::RUN-HOOK
*INVOKE-DEBUGGER-HOOK*
#<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAB2E19}>)
4: (INVOKE-DEBUGGER #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?: ~2I~_~A~:>" {AAB2E19}>)
5: (ERROR SB-INT:SIMPLE-STREAM-ERROR)[:EXTERNAL]
6: (SB-IMPL::SIMPLE-STREAM-PERROR
"Couldn't write to ~s"
#<SB-SYS:FD-STREAM for "standard output" {A9F10F9}>
32)
7: (FORCE-OUTPUT #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {910CD19}>)
8: (SB-INT:FLUSH-STANDARD-OUTPUT-STREAMS)
9: ((LABELS SB-IMPL::RESTART-LISP))
unhandled condition in --disable-debugger mode, quitting
Argh! error within --disable-debugger error handling
--8<---------------cut here---------------end--------------->8---
|