Python 3.4 访问 stdout

1 投票
1 回答
1030 浏览
提问于 2025-04-18 08:52

抱歉我不太熟练。当我在我的 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'...' 这样的字节字面量。

撰写回答