ger*_*rit 13 python io low-level
在Python 3.2(和其他版本)中,os.open的文档说明:
此功能适用于低级I/O. 对于正常使用,使用内置函数open(),它返回一个带有read()和write()方法的文件对象(以及更多).要将文件描述符包装在文件对象中,请使用fdopen().
而对于fdopen() :
返回连接到文件描述符fd的打开文件对象.这是open()的别名并接受相同的参数.唯一的区别是fdopen()的第一个参数必须始终是一个整数.
这个评论对之间的差异问题io.open和os.open(此不同的是完全清楚对我来说,我一直使用io.open,从来没有os.open)问:为什么会有人选择Python低级别的I/O?,但没有真正得到答案.
我的问题是非常相似的带注释的问题:在Python中,什么是I/O通过低级别的使用情况下os.open,os.fdopen,os.close,os.read,等?我曾经认为需要对一个过程进行deamonise,但我不再那么肯定了.是否有任何任务只能使用低级I/O执行,而不能使用更高级别的包装器执行?
当我需要使用O_CREAT | O_EXCL原子创建文件时,我使用它,如果文件存在则失败.如果测试发现文件不存在,则无法检查文件是否存在,然后创建文件,因为这将创建一个竞争条件,在该条件下可以在检查和创建之间的过渡期间创建文件.
简要地看一下你提供的链接,我确实认为pidfile创建有竞争条件.
在Python 3.3中,添加了一个新'x'模式open()似乎就是这样做的.不过我还没试过.
主要区别:
低级 io 的用例:
在所有这些情况下,您可能希望拥有更细粒度的控制(对缓冲和阻塞行为)。
您可能永远不需要常规文件的低级函数。我认为大多数时候用例都是一些设备驱动程序的东西。然而,这最好用 C 来完成。但我也可以看到 python 的用例,例如用于设备驱动程序的快速原型设计。