¿Cómo escribir datos binarios para stdout en python 3?

En Python 2.x podría hacer esto:

import sys, array a = array.array('B', range(100)) a.tofile(sys.stdout) 

Sin embargo, ahora obtengo un TypeError: can't write bytes to text stream . ¿Hay alguna encoding secreta que debería usar?

Una mejor manera:

 import sys sys.stdout.buffer.write(b"some binary data") 
 import os os.write(1, a.tostring()) 

o, os.write(sys.stdout.fileno(), …) si es más legible que 1 para usted.

En caso de que desee especificar una encoding en python3, aún puede usar el comando de bytes como se muestra a continuación:

 import os os.write(1,bytes('Your string to Stdout','UTF-8')) 

donde 1 es el número habitual correspondiente para stdout -> sys.stdout.fileno ()

De lo contrario, si no te importa la encoding solo usa:

 import sys sys.stdout.write("Your string to Stdout\n") 

Si desea utilizar el os.write sin la encoding, intente utilizar el siguiente:

 import os os.write(1,b"Your string to Stdout\n") 

Una forma idiomática de hacerlo, que solo está disponible para Python 3, es:

 with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout: stdout.write(b"my bytes object") stdout.flush() 

Lo bueno es que utiliza la interfaz de objeto de archivo normal, a la que todo el mundo está acostumbrado en Python.

Observe que estoy configurando closefd=False para evitar cerrar sys.stdout al salir del bloque with . De lo contrario, su progtwig ya no podría imprimir en la salida estándar. Sin embargo, para otro tipo de descriptores de archivos, es posible que desee omitir esa parte.