名为== 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
Run Code Online (Sandbox Code Playgroud)
它独自运行时没关系.但以下情况有问题:
然后我在<_io.TextIOWrapper name =''mode ='w'coding ='cp936'>忽略了Exception OSError:OSError(22,'Invalid argument')
我已经在os.sys.stdout.buffer操作中捕获了OSError,但它仍然出错.
如果我不使用os.sys.stdout.buffer.flush,那么没有错误消息.如果我只使用print(),一切都OK.
那么如何正确地将字节写入stdout呢?
我使用的是Windows 7 64位和Python 3.3.0 32位.
Cro*_*man 11
您可以使用os.fdopen不同的模式重新打开stdout.您可以使用获取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>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |