我已经看到了一些与此相关的问题,但没有一个明确地回答我的问题。
我有一个简短的python脚本,可以执行一些简单的任务,然后将一些文本输出到日志文件,等待更多输入和循环。
有时,文件以写入模式打开(" w"),有时则以附加模式打开文件(" a"),具体取决于其他任务的结果。为简单起见,我们假设它处于写入模式/追加模式50/50。
我打开文件说:
with open(fileName, mode) as file:
并写信给他们:
file.write(line)
当这些文件被打开,写入,附加等等时,我希望命令提示符对它们进行一些读取活动(特别是findstr)。
1)如果我的脚本试图写入命令窗口正在读取的同一文件,会发生什么?
2)有没有办法明确将开放模式设置为共享模式?
3)使用'记录器'模块帮助/处理这个而不是仅手动制作我自己的日志文件?
由于
答案 0 :(得分:3)
您所指的通常称为“竞争条件”,其中两个程序试图同时读取/写入同一文件。某些操作系统可以通过实现文件锁定互斥锁系统来帮助您避免这种情况,但在大多数操作系统上,您只会获得损坏的文件,崩溃的程序或两者兼而有之。
这是一篇有趣的文章,讨论如何在python中避免竞争条件: http://blog.gocept.com/2013/07/15/reliable-file-updates-with-python/
作者提出的一个建议是将文件复制到临时文件,在那里进行写入/追加,然后将文件移回。当文件长时间保持打开时会发生竞争条件,这样你就不会在python中实际打开主文件,因此在OS复制/移动操作期间发生冲突的唯一点就是快得多。