From: Ram B. <ra...@gm...> - 2009-10-21 04:20:28
|
looking through the sbcl sources I found (stream-reinit) in fd-stream.lisp. So I changed recreated *stdout*: (defun test2 () (setf sb-ext::*stdout* (sb-ext::make-fd-stream 1 :name "standard output" :output t :buffering :line :external-format :iso-8859-1))) With this change I am able to write my binary data to stdout. Have I done something really stupid? I simply do not know enough about Lisp or SBCL to fully understand the implications of this change. Can I just change the binding of *stdout* as needed? Or maybe I can just change it once and this can be used to output anything now... -Ram |
From: Pascal J. B. <pj...@in...> - 2009-10-21 10:12:17
|
On Oct 21, 2009, at 6:20 AM, Ram Bhamidipaty wrote: > looking through the sbcl sources I found (stream-reinit) in fd- > stream.lisp. > > So I changed recreated *stdout*: > > (defun test2 () > (setf sb-ext::*stdout* > (sb-ext::make-fd-stream 1 > :name "standard output" > :output t > :buffering :line > :external-format :iso-8859-1))) > > With this change I am able to write my binary data to stdout. > > Have I done something really stupid? I simply do not know enough > about Lisp or SBCL to fully understand the implications of this > change. > > Can I just change the binding of *stdout* as needed? Or maybe I can > just change it once and this can be used to output anything now... If this works, then you could wrap it in a bivalent stream so you can output binary data directly. But as I mentionned in my previous message, it's a bad idea to output binary data to the standard output, that is possibly to a terminal. -- __Pascal Bourguignon__ http://www.informatimago.com |
From: Leslie P. P. <sk...@vi...> - 2009-10-21 10:16:16
|
Pascal J. Bourguignon wrote: > If this works, then you could wrap it in a bivalent stream so you can > output binary data directly. But as I mentionned in my previous > message, it's a bad idea to output binary data to the standard output, > that is possibly to a terminal. This is pretty common and not a bad idea at all in a CGI or pipe context, though. Leslie -- http://www.linkedin.com/in/polzer |
From: Pascal J. B. <pj...@in...> - 2009-10-21 10:23:59
|
On Oct 21, 2009, at 12:15 PM, Leslie P. Polzer wrote: > > Pascal J. Bourguignon wrote: > >> If this works, then you could wrap it in a bivalent stream so you can >> output binary data directly. But as I mentionned in my previous >> message, it's a bad idea to output binary data to the standard >> output, >> that is possibly to a terminal. > > This is pretty common and not a bad idea at all in a CGI or pipe > context, > though. You still have to be careful. If you redirect sb-ext:*stdout*, this is a stream that would be used (indirectly) by the debugger, so you will have to deal with it either by making it a bivalent stream or by handing errors and/or redirecting the debugger to another stream. -- __Pascal Bourguignon__ http://www.informatimago.com |