Python以共享模式打开文件

4

我看到有一些与此相关的问题,但没有什么绝对回答我的问题。

我有一个简短的Python脚本,它执行一些简单的任务,然后将一些文本输出到日志文件中,等待更多输入,然后循环。

有时,该文件以写模式("w")打开,其他时候以追加模式("a")打开,具体取决于其他任务的结果。 为简单起见,让我们假设它在写模式/追加模式下各占50%。

我是通过以下方式打开文件的:

with open(fileName, mode) as file:

并通过向它们传递信息来写入:

file.write(line)

在这些文件被打开、写入、追加等过程中,我希望命令提示符在对它们进行一些读取活动(具体来说是findstr)。

1)如果我的脚本尝试向与命令窗口正在读取的同一文件写入,会发生什么?

2)是否有一种方法可以明确设置打开共享模式?

3)使用“logger”模块是否有所帮助/处理这个问题,而不仅仅是手动制作自己的日志文件?

谢谢

1个回答

3
您所指的通常被称为“竞争条件”,即两个程序在同时尝试读取/写入同一文件时发生的情况。某些操作系统可以通过实现文件锁定互斥系统来帮助您避免这种情况,但在大多数操作系统中,您只会得到一个损坏的文件、崩溃的程序或两者都有。
这是一篇有趣的文章,讨论了如何避免python中的竞争条件: http://blog.gocept.com/2013/07/15/reliable-file-updates-with-python/ 作者提出的一个建议是将文件复制到临时文件中,在那里进行写入/追加,然后将文件移回来。竞争条件发生在长时间保持文件打开的情况下,这样您实际上从未在python中打开主文件,因此仅可能在OS的复制/移动操作期间发生碰撞,这些操作速度更快。

1
经过进一步调查和实验,我可以谨慎地确认Python将允许命令窗口从当前已打开以进行写入/追加的文件中读取。其他进程无法确定。 - Mike T
1
很酷!如果一个进程只进行读取操作,那么这可能是安全的。问题发生在两个或更多的事物同时尝试写入时。 - Mike Ounsworth
2
3000次浏览和5年的经验后,我希望来到这里的人正在尝试您的临时文件方法,这绝对比我上面评论的方法更安全。 - Mike T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接