質問

の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")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top