python 3にstdoutにバイナリデータを書き込む方法?
-
05-09-2019 - |
質問
のPython 2.xでは、私はこれを行うことができます
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
さてしかし、私はTypeError: can't write bytes to text stream
を取得します。私が使用する必要のあるいくつかの秘密のエンコーディングはありますか?
解決
より良い方法:
import sys
sys.stdout.buffer.write(b"some binary data")
他のヒント
import os
os.write(1, a.tostring())
または、それはあなたのためのos.write(sys.stdout.fileno(), …)
よりも読みやすいかどう1
ます。
はPython 3でのみ利用可能ですそうすることの慣用的な方法は、次のとおりです。
with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout:
stdout.write(b"my bytes object")
stdout.flush()
良い部分は、それが誰もがPythonでに使用される通常のファイル・オブジェクト・インターフェースを使用することである。
closefd=False
ブロックを終了するとき、私は決算sys.stdout
を避けるためにwith
を設定しています注意してください。そうでなければ、あなたのプログラムはもうstdoutに印刷することはできません。ただし、ファイル記述子の他の種類のために、あなたはその部分をスキップしたいことがあります。
の場合、あなたはまだ以下のようなバイトのコマンドを使用することができるのpython3でエンコードを指定したいです
import os
os.write(1,bytes('Your string to Stdout','UTF-8'))
1は、STDOUTに対応する通常の数である - > sys.stdout.fileno()
あなたはエンコーディングの気にしない場合は、それ以外の場合だけ使用します:
import sys
sys.stdout.write("Your string to Stdout\n")
あなたは以下を使用しよう、その後、エンコードせずにos.writeを使用する場合:
import os
os.write(1,b"Your string to Stdout\n")
所属していません StackOverflow