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.writefuncionará tanto en Py2 como en Py3.Respuestas:
Una mejor manera:
fuente
sys.stdout.buffertambién le permite hacer cosas como usarshutil.copyfileobjincluso cuando el objeto del archivo de origen proporciona bytes, y no cadenas. +1AttributeError: 'PseudoOutputFile' object has no attribute 'buffer'pythonw.exeejecuta 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.stderrsi se usa junto conprint(file=sys.stderr).o,
os.write(sys.stdout.fileno(), …)si eso es más legible que1para usted.fuente
os.writees 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=Falsepara evitar el cierresys.stdoutal salir delwithbloque. 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: filenostdoutla última.