为我的无能而道歉。当我在我的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。
答案 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'...'
字节文字。