web-dev-qa-db-ja.com

python 3でstdoutにバイナリデータを書き込む方法は?

python 2.xこれを行うことができます:

import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)

ただし、今ではTypeError: can't write bytes to text stream。使用すべき秘密のエンコーディングはありますか?

82
Ivan Baldin

より良い方法:

import sys
sys.stdout.buffer.write(b"some binary data")
136

Python 3でのみ利用できる慣用的な方法です:

with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout:
    stdout.write(b"my bytes object")
    stdout.flush()

良い点は、Pythonで誰もが慣れている通常のファイルオブジェクトインターフェイスを使用することです。

withブロックを終了するときにclosefd=Falseを閉じないようにsys.stdoutを設定していることに注意してください。そうしないと、プログラムは標準出力に印刷できなくなります。ただし、他の種類のファイル記述子の場合、その部分をスキップすることもできます。

2
Yajo

Python3でエンコードを指定する場合は、以下のようにまだbytesコマンドを使用できます。

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")
0
Marco smdm