来自urllib.urlopen()
上的python文档,讨论函数在成功时返回的类文件对象:
(它不是内置文件对象,因此不能在需要真正内置文件对象的少数几个地方使用。)
那些需要真正内置文件对象的地方是什么?
NB:这纯粹是出于好奇......这里没有实际问题需要解决。答案 0 :(得分:3)
正如其他答案所指出的那样,实际上并没有特别需要file
对象的地方,但是有些接口需要真正的操作系统级文件描述符,这些描述符类似于文件像StringIO
这样的对象无法提供。
os
模块有几种直接在文件描述符上运行的方法,select
和mmap
模块也是如此。一些更高级别的模块依赖于底层的模块,因此在处理不支持fileno()
方法的类文件对象时可能会遇到一些限制。
我不知道有关这些限制的任何一致文档(除了显然接受数字文件描述符而不是对象的API之外)。这更像是“尝试并看看它是否有效”。如果事情不起作用,那么这可以留在您的脑海中,作为可能的罪魁祸首(特别是如果"no attribute named 'fileno'"
或"invalid file descriptor"
之类的短语出现在任何相关的错误消息中。< / p>
答案 1 :(得分:2)
subprocess
模块中的内容需要stdin
,stdout
和stderr
具有fileno
可调用属性的文件对象,only files with a file descriptor (real files) should implement 。 isatty()
也应仅在实际文件中实现,但我不知道它在哪里。
答案 2 :(得分:0)
例如,f.fileno()不一定返回可以与os.read()一起使用的真实操作系统级文件描述符。