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

一个名为== 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退出

然后我得到异常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位。


慕田峪4524236
浏览 230回答 1
1回答

慕容森

您可以使用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>>>&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python