Wie schreibt binäre Daten auf die Standardausgabe in python 3?
In python 2.x ich dies tun könnte:
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
Nun aber, bekomme ich eine TypeError: can't write bytes to text stream
. Gibt es eine geheime Codierung, die ich verwenden sollte?
- Es wäre viel besser, eine Antwort zu finden, die die Arbeit mit Python 2.6+ und 3.x
os.write
funktioniert auf beiden Py2 und Py3.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen besseren Weg:
sys.stdout.buffer
auch lässt Sie Dinge tun, wie mitshutil.copyfileobj
auch wenn die Quell-Datei-Objekt gibt die bytes, und nicht die Saiten. +1AttributeError: 'PseudoOutputFile' object has no attribute 'buffer'
pythonw.exe
läuft im LEERLAUF, was bedeutet, dass es keine Ausgabe auf stdout. Es wird emuliert mit tkinter. Es kann körperlich nicht mit bytes. In diesem Fall.decode('UTF-8', errors='replace')
Ihren string aus, oder führen Siepython3 -I <filename>
um eine REPL anstatt im LEERLAUF.stderr
bei Verwendung zusammen mitprint(file=sys.stderr)
.oder
os.write(sys.stdout.fileno(), …)
wenn das ist mehr lesbar als1
für Sie.os.write
ist, dass müssen Sie den Rückgabewert überprüfen, da es nicht garantieren, dass alles, was geschrieben wird.Als idiomatische Weise, dies zu tun, die nur für Python 3 ist:
Der gute Teil ist, dass es verwendet die Standard-Datei-Objekt Schnittstelle, die jeder verwendet wird, um in Python.
Bemerken, dass ich die Einstellung
closefd=False
zu vermeiden, schließensys.stdout
beim verlassen deswith
block. Ansonsten, Ihr Programm nicht in der Lage sein, um eine Ausgabe auf stdout nicht mehr. Aber für andere Art von Datei-Deskriptoren, möchten Sie vielleicht überspringen Sie diesen Teil.In Fall, dass Sie möchten, um anzugeben, eine Codierung in Python ist3 können Sie immer noch die Byte-Befehl wie folgt:
wobei 1 die entsprechenden übliche Zahl für stdout --> sys.stdout.fileno()
Andernfalls, wenn Sie nicht aufpassen der Codierung nutzen Sie einfach:
Wenn Sie möchten, verwenden Sie die os.schreiben ohne Codierung, dann versuchen Sie bitte die unten:
os.write(sys.stdout.fileno(), some_bytes)
funktioniert nicht im LEERLAUF.io.UnsupportedOperation: fileno
stdout
die Letzte.