一个名为== a.py ==的测试文件import osif __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单独运行时可以。但是在以下情况下有问题:运行python a.py | 更多的按Ctrl + c退出然后我得到异常OSError:<_io.TextIOWrapper name =''mode ='w'encoding ='cp936'>中的OSError(22,'Invalid arguments')OSError(忽略)我已经在os.sys.stdout.buffer操作周围发现了OSError,但是仍然出错。如果我不使用os.sys.stdout.buffer.flush,则没有错误消息。如果我只使用print(),一切都很好。那么如何正确地将字节写入标准输出呢?我正在使用Windows 7 64位和Python 3.3.0 32位。
1 回答

慕容森
TA贡献1853条经验 获得超18个赞
您可以使用os.fdopen不同的模式重新打开标准输出。您可以使用来获取stdout的文件号sys.stdout.fileno()。
例子:
>>> fp = os.fdopen(sys.stdout.fileno(), 'wb')
>>> fp.write(b'Hello, world')
12
>>> sys.stdout.mode
'w'
>>> fp.mode
'wb'
>>> fp.flush()
Hello, world>>>
添加回答
举报
0/150
提交
取消