En python 2.x podría hacer esto:
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
Ahora, sin embargo, obtengo un TypeError: can't write bytes to text stream
. ¿Hay alguna codificación secreta que deba usar?
python
python-3.x
Ivan Baldin
fuente
fuente
os.write
funcionará tanto en Py2 como en Py3.Respuestas:
Una mejor manera:
fuente
sys.stdout.buffer
también le permite hacer cosas como usarshutil.copyfileobj
incluso cuando el objeto del archivo de origen proporciona bytes, y no cadenas. +1AttributeError: 'PseudoOutputFile' object has no attribute 'buffer'
pythonw.exe
ejecuta IDLE, lo que significa que no hay stdout. Se emula con tkinter. Físicamente no puede manejar bytes. En este caso,.decode('UTF-8', errors='replace')
su cadena, o ejecutepython3 -I <filename>
para obtener un REPL en lugar de usar IDLE.stderr
si se usa junto conprint(file=sys.stderr)
.o,
os.write(sys.stdout.fileno(), …)
si eso es más legible que1
para usted.fuente
os.write
es que tendrás que verificar el valor de retorno, ya que no garantiza que todo se escribirá.Una forma idiomática de hacerlo, que solo está disponible para Python 3, es:
La parte buena es que utiliza la interfaz de objeto de archivo normal, a la que todos están acostumbrados en Python.
Observe que estoy configurando
closefd=False
para evitar el cierresys.stdout
al salir delwith
bloque. De lo contrario, su programa ya no podrá imprimir en stdout. Sin embargo, para otros tipos de descriptores de archivo, es posible que desee omitir esa parte.fuente
En caso de que desee especificar una codificación en python3, aún puede usar el comando bytes como se muestra a continuación:
donde 1 es el número habitual correspondiente para stdout -> sys.stdout.fileno ()
De lo contrario, si no le importa la codificación, simplemente use:
Si desea utilizar os.write sin la codificación, intente utilizar lo siguiente:
fuente
os.write(sys.stdout.fileno(), some_bytes)
no funcionarán en IDLE.io.UnsupportedOperation: fileno
stdout
la última.