我的應用程序中,我有以下請求: 1.有一個線程會定期記錄文件中的某些日誌。日誌文件將在一定的時間間隔內滾動。保持日誌文件小。 2.還有另一個線程也會定期處理這些日誌文件。例如:將日誌文件移到其他位置,解析日誌的內容以生成一些日誌報告。在Python中檢查文件是否未打開(未被其他進程使用)
但是,有一個條件是第二個線程無法處理用於記錄日誌的日誌文件。在代碼方面,僞同類者象下面這樣:
#code in second thread to process the log files
for logFile in os.listdir(logFolder):
if not file_is_open(logFile) or file_is_use(logFile):
ProcessLogFile(logFile) # move log file to other place, and generate log report....
那麼,怎樣檢查是一個文件已經打開,或者被其他進程? 我在網上做了一些研究。並有一定的效果:
try:
myfile = open(filename, "r+") # or "a+", whatever you need
except IOError:
print "Could not open file! Please close Excel!"
我嘗試這樣的代碼,但它不工作,不管我用「R +」或「+」標誌
try:
os.remove(filename) # try to remove it directly
except OSError as e:
if e.errno == errno.ENOENT: # file doesn't exist
break
這段代碼可以工作,但它無法達到我的要求,因爲我不想刪除文件以檢查它是否處於打開狀態。
您是否嘗試將'os.remove'更改爲最後'try'塊內的'ProcessLogFile'?也許調整錯誤編號:有'EBUSY'和[其他](http://docs.python.org/library/errno.html)嘗試。 –
你可能想讀這個問題http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python,特別是這個http://stackoverflow.com/a/7142094/546873回答 – Nicoretti
如何在Windows平臺上做類似的事情來列出打開的文件。 – zengwke