sys.stdout.detach() results in ValueError

Mark Tolonen metolone at gmail.com
Thu Mar 8 01:41:36 CET 2012


On Mar 7, 4:10 pm, Terry Reedy <tjre... at udel.edu> wrote:
> On 3/7/2012 5:35 PM, Peter Kleiweg wrote:
>
>
>
>
>
>
>
>
>
> > Dave Angel schreef op de 7e dag van de lentemaand van het jaar 2012:
>
> >> On 03/07/2012 02:41 PM, Peter Kleiweg wrote:
> >>> I want to write out some binary data to stdout in Python3. I
> >>> thought the way to do this was to call detach on sys.stdout. But
> >>> apparently, you can't. Here is a minimal script:
>
> >>>       #!/usr/bin/env python3.1
> >>>       import sys
> >>>       fp = sys.stdout.detach()
>
> >>> Not yet using fp in any way, this script gives the following error:
>
> >>>       Exception ValueError: 'underlying buffer has been detached' in
>
> >>> Same in Python 3.1.4 and Python 3.2.2
>
> >>> So, what do I do if I want to send binary data to stdout?
>
> >> sys.stdout.write(  some_binary_data )
>
> > TypeError: must be str, not bytes
>
> Right, you can only send binary data to file opened in binary mode. The
> default sys.stdout is in text mode. I am pretty sure that remains true
> even if stdout is redirected. (You did not mention your OS.) You would
> have to open such a file and make sys.stdout point to it.
> sys.stdout = my_binary_file.
> But why do that? Just open the file and write to it directly without the
> above.
>
> --
> Terry Jan Reedy

Write binary data to sys.stdout.buffer.

-Mark



More information about the Python-list mailing list