Python:打开文件而不创建锁

Sil*_*eel 4 python backup file-locking filestreams

我正在尝试用Python创建一个脚本来备份一些文件.但是,这些文件可以随时重命名或删除.我不希望我的脚本通过锁定文件来阻止它; 在备份期间,该文件应该仍然可以随时删除.

我怎么能用Python做到这一点?而且,会发生什么?如果无法读取流,我的对象是否会变为空?

谢谢!我对Python有些新意.

Sil*_*eel 6

正如kindall所提到的,这是一个特定于Windows的问题.Unix操作系统允许删除.

要在Windows中执行此操作,我需要使用win32file.CreateFile来使用Windows特定的dwSharingMode标志(在Python的win32file中,它只是称为"sharingmode").这里有一些文档:http: //docs.activestate.com/activepython/2.7/pywin32/win32file__CreateFile_meth.html

粗略的例子:

import win32file # Ensure you import the module.

file_handle = win32file.CreateFile('filename.txt', win32file.GENERIC_READ, win32file.FILE_SHARE_DELETE | win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
Run Code Online (Sandbox Code Playgroud)

  • 然后你可以使用 `os.fdopen(msvcrt.open_osfhandle(file_handle, os.O_RDONLY))` 将该句柄转换为标准文件对象。此外,`os.fdopen()` 也可以与 `with` 一起使用,就像 `open()` 一样。 (3认同)

kin*_*all 5

在类 UNIX 操作系统(包括 Linux)上,这不是问题。好吧,其他一些程序可能会在您读取文件的同时写入文件,这可能会导致问题(您正在复制的文件最终可能会损坏),但这可以通过验证通过来解决。

在 Windows 上,使用卷快照服务(又名卷影复制)。VSS 会在某个时刻创建卷的快照,您可以在不锁定原始卷上的文件的情况下打开快照上的文件。一个快速的谷歌在这里找到了一个使用 VSS 进行复制的 Python 模块:http : //sourceforge.net/projects/pyvss/