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

Cla*_*diu 5 python api interface file standard-library

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

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

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

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

nco*_*lan 3

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

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

不过,我不知道这些限制有任何一致的文档(除了明显的接受数字文件描述符而不是对象的 API 之一)。这更多的是“尝试一下,看看是否有效”的问题。如果事情不起作用,那么您需要记住这一点,以检查可能的罪魁祸首(特别是如果短语 like"no attribute named 'fileno'""invalid file descriptor"出现在任何相关错误消息中)。