Как записать двоичные данные в стандартный вывод в Python 3? - PullRequest
77 голосов
/ 26 мая 2009

В Python 2.x я мог бы сделать это:

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

Теперь, однако, я получаю TypeError: can't write bytes to text stream. Есть ли какая-то секретная кодировка, которую я должен использовать?

Ответы [ 4 ]

129 голосов
/ 26 мая 2009

Лучший способ:

import sys
sys.stdout.buffer.write(b"some binary data")
11 голосов
/ 26 мая 2009
import os
os.write(1, a.tostring())

или os.write(sys.stdout.fileno(), …), если это более читабельно, чем 1 для вас.

1 голос
/ 07 января 2019

Идиоматический способ сделать это, который доступен только для 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. В противном случае ваша программа не сможет печатать на стандартный вывод. Однако для других типов файловых дескрипторов вы можете пропустить эту часть.

1 голос
/ 13 апреля 2015

Если вы хотите указать кодировку в 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...