在Linux中,如何在讀取文件之前知道文件是否已完成複製?在Windows中,引發了一個OSError。文件複製完成?
Q
文件複製完成?
0
A
回答
1
可以使用inotify的機制(通過pyinotify)趕上像創建活動,寫,關閉,並根據他們,你可以假設羯羊拷貝已經完成與否。
但是,由於您沒有提供有關您要做什麼的詳細信息,因此我無法判斷inotify是否適合您(btw,inotify是Linux特有的,因此您無法在Windows或其他平臺上使用它)
1
在Linux中,您可以在另一個進程正在寫入文件時打開文件,而不需要Python拋出OSError
,因此通常無法確定對方是否已完成寫入該文件。您可以嘗試一些黑客,但:
您可以定期檢查文件大小,看它是否增加了自上次檢查。如果它沒有增加例如五秒鐘,那麼可能是可以安全地假定副本已經完成。我想說可能是,因爲在任何情況下都不是這樣。如果寫入文件的其他進程因任何原因被阻塞,則可能會暫時停止寫入文件並稍後恢復。因此,這不是100%的傻瓜,但如果系統永遠不會承受沉重的寫入過程,那麼它可能適用於本地文件副本。
您可以檢查
fuser
(這是一個shell命令)的輸出,該輸出將列出持有給定文件名的文件句柄的所有文件的進程ID。如果此列表包含除您以外的任何進程,則可以假定複製過程尚未完成。但是,您必須確保在目標系統上安裝了fuser
以使其正常工作。
+0
我正在使用輪詢方法。我想知道是否有更好的方法...... – asdfg 2010-06-07 12:43:34
相關問題
- 1. 複製完成的文件?
- 2. 檢查文件是否完成複製
- 3. 複製完成Webbrowser元素?
- 4. 讀取尚未完成複製/上傳的文件內容
- 5. 如何知道一個文件是完成複製
- 6. 完成後通知腳本文件複製
- 7. grep qstat輸出和複製文件一旦完成
- 8. 不完整的文件複製Java NIO
- 9. 複製谷歌的自動完成與jQuery自動完成
- 10. 複製文件VS不復制文件?
- 11. 複製完成後xcopy是否暫停?
- 12. Swift - 複製完成處理程序
- 13. 複製完成後的運行過程
- 14. 複製完成SQL Server 2008 db
- 15. C# - 等待複製操作完成
- 16. CouchbaseLite等待pull複製完成
- 17. 啓動MySQL複製腳本 - 檢測完成的複製
- 18. javascript複製輸入文件並獲取完整文件路徑
- 19. IntelliJ:生成後複製戰爭文件
- 20. 複製的文件名變成亂碼
- 21. 成功構建後複製文件
- 22. Makefile生成的文件不被複制
- 23. 複製文件
- 24. 如何確定文件是否已完成傳輸以便能夠複製
- 25. 基於在配置階段完成後確定的模式複製文件
- 26. 如何知道java中是否正在進行文件複製/完成(1.6)
- 27. 如何確定文件何時完成複製以便進一步處理?
- 28. 使用DataInputStream逐字節複製文件在完成之前停止
- 29. 當複製然後刪除Azure文件時,複製完成後刪除總是會啓動嗎?
- 30. 打開文件完成
請注意,pyinotify的主頁現在是http://trac.dbzteam.org/pyinotify而不是SourceForge頁面。無論如何,偉大的回答,我不知道這個模塊! – 2010-06-07 12:41:14
它的工作......謝謝。 – asdfg 2010-06-07 12:55:42