2010-12-21 110 views
0

我正在查找一些代碼到檢查文件系統中的文件是否可用(未被另一進程使用)。我怎麼能在Python中做到這一點?謝謝!在Python中檢查文件是否可用(未被另一個進程使用)

我將如何使用它:一次性檢查文件是否可用以及何時可用(進程不再需要它)將其刪除。

+1

進程A和進程B是否要使用該文件,並在進程中進行鎖定,並且進程C將輪詢以查看是否可以刪除該文件以瞭解A和B都已完成?這是乞求成爲一個競爭條件 - 說過程A完成,釋放文件,然後C獲取時間片,刪除文件,然後B得到時間片,並去使用該文件和繁榮。 – mtrw 2010-12-21 11:04:59

+0

@mtrw這很好。但是在我的情況下並不複雜:只有一個進程使用該文件並且只有一次。 – bluish 2010-12-21 13:04:47

回答

2
while True: 
    try: 
     os.remove(yourfilename) # try to remove it directly 
    except OSError as e: 
     if e.errno == errno.ENOENT: # file doesn't exist 
      break 
     time.sleep(5) 
    else: 
     break 
+1

+1。一個糟糕的解決方案,以解決問題。當然這假定文件*是*鎖定/不可刪除的。如果刪除該文件意味着「該過程是通過該文件完成的」,那麼,哎呀!我不會相信比我跳得更遠。 – 2010-12-21 10:40:39

0

如果該文件的其他進程打開了該文件,並刪除它,它不會從文件系統中,直到所有的進程關閉其句柄它刪除。

如果其他進程僅僅需要其文件句柄/對象繼續工作,則可以安全地刪除該文件,並在進程關閉句柄時將其刪除。如果您希望能夠在文件上調用open(),則兩個進程都需要使用鎖(請參閱fcntl.flock())。

0

不知道你是否在linux上。我認爲你正在尋找的是在python中實現像fuser一樣的功能。

如果你在linux上,你可以遍歷'/ proc'文件系統下的進程ID,並檢查這些進程正在引用的文件。 檢查腳本fuser.py。您可以使用相同的方法,並根據需要調整上面列出的代碼。

+0

謝謝!其實我正在使用Windows(不幸!),但我希望你的回答能幫助一些Linux用戶。 – bluish 2010-12-21 14:35:45

相關問題