В python 2.x я мог сделать это:
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
Однако теперь я получаю файл TypeError: can't write bytes to text stream
. Есть ли какая-то секретная кодировка, которую я должен использовать?
python
python-3.x
Иван Балдин
источник
источник
os.write
будет работать как на Py2, так и на Py3.Ответы:
Лучший способ:
источник
sys.stdout.buffer
также позволяет вам делать такие вещи, как использование,shutil.copyfileobj
даже когда объект исходного файла дает байты, а не строки. +1AttributeError: 'PseudoOutputFile' object has no attribute 'buffer'
pythonw.exe
запускает IDLE, что означает отсутствие стандартного вывода. Эмулируется с помощью tkinter. Он физически не может обрабатывать байты. В этом случае.decode('UTF-8', errors='replace')
ваша строка или runpython3 -I <filename>
для получения REPL вместо использования IDLE.stderr
если используется вместе сprint(file=sys.stderr)
.или,
os.write(sys.stdout.fileno(), …)
если это более читабельно, чем1
для вас.источник
os.write
том, что вам придется проверять возвращаемое значение, так как это не гарантирует, что все будет записано.Идиоматический способ сделать это, доступный только для Python 3, следующий:
Хорошая часть состоит в том, что он использует обычный интерфейс файлового объекта, к которому все привыкли в Python.
Обратите внимание, что я устанавливаю,
closefd=False
чтобы избежать закрытияsys.stdout
при выходе изwith
блока. В противном случае ваша программа больше не сможет печатать на стандартный вывод. Однако для других типов файловых дескрипторов вы можете пропустить эту часть.источник
Если вы хотите указать кодировку в python3, вы все равно можете использовать команду bytes, как показано ниже:
где 1 - соответствующее обычное число для stdout -> sys.stdout.fileno ()
В противном случае, если вам не нужна кодировка, просто используйте:
Если вы хотите использовать os.write без кодировки, попробуйте использовать следующее:
источник
os.write(sys.stdout.fileno(), some_bytes)
не будут работать в IDLE.io.UnsupportedOperation: fileno
stdout
, последний.