En python 2.x, je pourrais faire ceci:
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
Maintenant, cependant, je reçois un TypeError: can't write bytes to text stream
. Y a-t-il un encodage secret que je devrais utiliser?
Une meilleure façon:
import sys
sys.stdout.buffer.write(b"some binary data")
import os
os.write(1, a.tostring())
ou os.write(sys.stdout.fileno(), …)
si c'est plus lisible que 1
pour vous.
Si vous souhaitez spécifier un codage dans python3, vous pouvez toujours utiliser la commande bytes comme ci-dessous:
import os
os.write(1,bytes('Your string to Stdout','UTF-8'))
où 1 est le nombre habituel correspondant à stdout -> sys.stdout.fileno ()
Sinon, si vous ne vous souciez pas de l'encodage, utilisez simplement:
import sys
sys.stdout.write("Your string to Stdout\n")
Si vous souhaitez utiliser os.write sans l'encodage, essayez d'utiliser les éléments ci-dessous:
import os
os.write(1,b"Your string to Stdout\n")
Une façon idiomatique de le faire, qui n'est disponible que pour Python 3, est la suivante:
with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout:
stdout.write(b"my bytes object")
stdout.flush()
La bonne partie est qu’il utilise l’interface objet-fichier normale, à laquelle tout le monde est habitué en Python.
Notez que je configure closefd=False
pour éviter de fermer sys.stdout
lorsque vous quittez le bloc with
. Sinon, votre programme ne pourrait plus imprimer sur stdout. Cependant, pour d'autres types de descripteurs de fichiers, vous pouvez ignorer cette partie.