在Python3.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中,通过os.open__、os.fdopen__、os.close__、os.read__等低级别I/O的用例是什么?我曾经认为这是一个过程的需要,但是我不太确定了。是否有任何任务只能使用低级别I/O执行,而不能使用更高级别的包装器执行?
发布于 2013-01-11 15:50:23
主要差异:
低级别io的用例:
在所有这些情况下,您可能希望拥有更细粒度的控制(而不是缓冲和阻塞行为)。
您可能永远不需要普通文件的低级别函数。我认为大多数情况下用例将是一些设备驱动程序的东西。但是,这最好用C语言来完成,但我也可以看到python的用例,例如设备驱动程序的快速原型。
发布于 2013-01-11 15:11:44
当我需要使用O_CREAT | O_EXCL创建一个文件时,我会使用它,如果文件存在,则失败。如果测试发现文件不存在,则无法检查文件是否存在,因为这将创建一个争用条件,在检查和创建之间的过渡期间可以创建该文件。
简单地看一下你提供的链接,我确实认为pidfile的创建有一个竞争条件。
在Python3.3中,添加到模式中的open()似乎就是这样做的。不过我还没试过呢。
https://stackoverflow.com/questions/14280384
复制相似问题