解决此问题的最佳方法是:
内置函数的工作方式如下
>>> path = r"c:\scr.txt" >>> file1 = open(path, "w") >>> print file1 <open file 'c:\scr.txt', mode 'w' at 0x019F88D8> >>> file2 = open(path, "w") >>> print file2 <open file 'c:\scr.txt', mode 'w' at 0x02332188> >>> file1.write("111") >>> file2.write("222") >>> file1.close()
scr.txt现在包含“ 111”。
>>> file2.close()
scr.txt已被覆盖,现在包含“ 222”(在Windows上为Python 2.4)。
该解决方案应在同一进程内工作(如上例所示),以及在另一个进程打开文件时。 如果崩溃的程序无法使锁保持打开状态,则是首选。
我认为没有完全跨平台的方式。在unix上,fcntl模块将为您执行此操作。但是在Windows上(我假设您是通过路径访问的),您将需要使用win32file模块。
幸运的是,在Python Cookbook上有一个使用平台适当方法的可移植实现(portalocker)。
要使用它,请打开文件,然后调用:
portalocker.lock(file, flags)
其中标志是portalocker.LOCK_EX用于独占写访问,而LOCK_SH用于共享读访问。