Python 3.4访问stdout

时间:2014-06-06 14:18:44

标签: python python-3.x python-idle

为我的无能而道歉。当我在我的python 3.4安装上运行以下IDLE时,它就失败了。

>>> sys.stdout.fileno()
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    sys.stdout.fileno()
io.UnsupportedOperation: fileno

这似乎给了一些有用的东西......

>>> sys.stdout.fileno
<built-in method fileno of PseudoOutputFile object at 0x030927D0>

我做错了什么显而易见的事情?

感谢。

总而言之,我实际上是在努力做到这一点:

import os
os.write(1, "Hello world!\n")

但是得到了以下错误,所以沿着尝试stdout的路线

Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    os.write(1, "Hello world!\n")
TypeError: 'str' does not support the buffer interface

所以打印sys.stdout.fileno()的调用会给我一个数字,我想它可能只是它不应该是1。

1 个答案:

答案 0 :(得分:4)

Windows下的IDLE以pythonw.exe启动,这是一个无控制台的GUI。因此,根本没有分配stdout句柄。

shell窗口本身需要将所有stdout输出重定向到GUI窗口,这是您看到的PseudoOutputFile对象。

如果您想尝试写入1文件编号,则需要在附加控制台的情况下启动IDLE:

py -m idlelib
来自控制台的

应该足以为您提供具有实际sys.__stdout__文件句柄的流程,并且使用os.write(1, ...)进行编写将有效。

请记住,直接写入文件句柄需要 bytes ,而不是Unicode文本。对文本进行编码或使用b'...'字节文字。