python:在哪里需要真正的内置文件对象?

时间:2011-05-15 23:48:34

标签: python api file interface standard-library

来自urllib.urlopen()上的python文档,讨论函数在成功时返回的类文件对象:

  

(它不是内置文件对象,因此不能在需要真正内置文件对象的少数几个地方使用。)

那些需要真正内置文件对象的地方是什么?

NB:这纯粹是出于好奇......这里没有实际问题需要解决。

3 个答案:

答案 0 :(得分:3)

正如其他答案所指出的那样,实际上并没有特别需要file对象的地方,但是有些接口需要真正的操作系统级文件描述符,这些描述符类似于文件像StringIO这样的对象无法提供。

os模块有几种直接在文件描述符上运行的方法,selectmmap模块也是如此。一些更高级别的模块依赖于底层的模块,因此在处理不支持fileno()方法的类文件对象时可能会遇到一些限制。

我不知道有关这些限制的任何一致文档(除了显然接受数字文件描述符而不是对象的API之外)。这更像是“尝试并看看它是否有效”。如果事情不起作用,那么这可以留在您的脑海中,作为可能的罪魁祸首(特别是如果"no attribute named 'fileno'""invalid file descriptor"之类的短语出现在任何相关的错误消息中。< / p>

答案 1 :(得分:2)

subprocess模块中的内容需要stdinstdoutstderr具有fileno可调用属性的文件对象,only files with a file descriptor (real files) should implementisatty()也应仅在实际文件中实现,但我不知道它在哪里。

答案 2 :(得分:0)

例如,f.fileno()不一定返回可以与os.read()一起使用的真实操作系统级文件描述符。