Ответ 1
Лучший способ:
import sys
sys.stdout.buffer.write(b"some binary data")
В 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
для вас.
Если вы хотите указать кодировку в 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")
Идиоматический способ сделать это, который доступен только для 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
. В противном случае ваша программа не сможет печатать на стандартный вывод. Однако для других типов файловых дескрипторов вы можете пропустить эту часть.