Python 3.4 访问 stdout
抱歉我不太熟练。当我在我的 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
于是我调用 print sys.stdout.fileno(),这会给我一个数字,我想这可能是因为它不应该是 1。
1 个回答
4
在Windows系统中,IDLE是通过 pythonw.exe
启动的,这个程序没有控制台界面。也就是说,它没有分配 stdout
(标准输出)这个句柄。
为了让输出信息能够显示在图形界面上,shell窗口需要把所有的标准输出重定向到图形界面窗口,这就是你看到的 PseudoOutputFile
对象。
如果你想尝试向 1
这个文件编号写入内容,你需要在有控制台的情况下启动IDLE:
py -m idlelib
从控制台启动就足够让你获得一个实际的 sys.__stdout__
文件句柄,这样用 os.write(1, ...)
就可以正常工作了。
记住,直接向文件句柄写入内容时需要使用字节,而不是Unicode文本。你需要对文本进行编码,或者使用 b'...'
这样的字节字面量。