如何在python.3中将字节写入stdout

时间:2013-05-16 13:52:22

标签: python python-3.x

名为== a.py ==

的测试文件
import os

if __name__ == '__main__':
    for x in range(0,1000):
        try:
            os.sys.stdout.buffer.write(b"hello\r\n")
            os.sys.stdout.buffer.flush()
        except OSError:
            pass

单独运行时没关系。但是以下情况有问题:

  1. 运行python a.py |更
  2. 按ctrl + c退出
  3. 然后我在< _io.TextIOWrapper name =''mode ='w'coding ='cp936'>中得到Exception OSError:OSError(22,'Invalid argument')。忽略

    我已经在os.sys.stdout.buffer操作中捕获了OSError,但它仍然出错。

    如果我不使用os.sys.stdout.buffer.flush,则没有错误消息。如果我只使用print(),一切都还可以。

    那么如何正确地将字节写入stdout?

    我使用的是Windows 7 64位和Python 3.3.0 32位。

1 个答案:

答案 0 :(得分:11)

您可以使用os.fdopen以不同模式重新打开标准输出。您可以使用sys.stdout.fileno()获取stdout的文件编号。

示例:

>>> fp = os.fdopen(sys.stdout.fileno(), 'wb')
>>> fp.write(b'Hello, world')
12
>>> sys.stdout.mode
'w'
>>> fp.mode
'wb'
>>> fp.flush()
Hello, world>>>