簡體   English   中英

Python:打開文件而不創建鎖

[英]Python: Opening a file without creating a lock

我正在嘗試用 Python 創建一個腳本來備份一些文件。 但是,這些文件可以隨時重命名或刪除。 我不希望我的腳本通過鎖定文件來防止這種情況發生; 在備份期間,該文件應該仍然可以隨時被刪除。

我怎樣才能在 Python 中做到這一點? 而且,會發生什么? 如果無法讀取流,我的對象是否會變為空?

謝謝! 我對 Python 有點陌生。

正如@kindall 所提到的,這是一個特定於 Windows 的問題。 Unix 操作系統允許刪除。

要在 Windows 中執行此操作,我需要使用win32file.CreateFile()來使用特定於 Windows 的dwSharingMode標志(在 Python 的pywin32 ,它只是稱為shareMode )。

粗略示例:

import msvcrt
import os
import win32file

file_handle = win32file.CreateFile(
    'filename.txt', win32file.GENERIC_READ,
    win32file.FILE_SHARE_DELETE | win32fileFILE_SHARE_READ | win32file.FILE_SHARE_WRITE,
    None,
    win32file.OPEN_EXISTING,
    win32file.FILE_ATTRIBUTE_NORMAL,
    None
)
with os.fdopen(msvcrt.open_osfhandle(file_handle, os.O_RDONLY)) as file_descriptor:
    ... # read from `file_descriptor`

注意:如果您需要在返回的文件句柄對象的生命周期之后保持win32 文件打開,您應該在該句柄上調用PyHandle.detach()

在類 UNIX 操作系統(包括 Linux)上,這不是問題。 好吧,其他一些程序可能會在您讀取文件的同時寫入文件,這可能會導致問題(您正在復制的文件最終可能會損壞),但這可以通過驗證通過來解決。

在 Windows 上,使用卷快照服務(又名卷影復制)。 VSS 會在某個時刻創建卷的快照,您可以在不鎖定原始卷上的文件的情況下打開快照上的文件。 一個快速的谷歌在這里找到了一個使用 VSS 進行復制的 Python 模塊: http : //sourceforge.net/projects/pyvss/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM