亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Python中檢查文件是否未打開(其他進程未使用)

在Python中檢查文件是否未打開(其他進程未使用)

慕工程0101907 2019-12-25 14:05:11
在我的應用程序中,我有以下要求:1.有一個線程將定期在文件中記錄一些日志。日志文件將在一定間隔內翻轉。用于保持日志文件較小。2.還有另一個線程將定期處理這些日志文件。例如:將日志文件移到其他位置,解析日志內容以生成一些日志報告。但是,有一個條件是第二個線程無法處理用于記錄日志的日志文件。在代碼方面,偽代碼類似如下:#code in second thread to process the log filesfor 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 needexcept IOError:    print "Could not open file! Please close Excel!"我嘗試了此代碼,但是無論我使用“ r +”還是“ a +”標志,該代碼均無效try:   os.remove(filename) # try to remove it directlyexcept OSError as e:    if e.errno == errno.ENOENT: # file doesn't exist        break該代碼可以工作,但是無法達到我的要求,因為我不想刪除該文件以檢查它是否打開。
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

我喜歡Daniel的回答,但我意識到將文件重命名為它已經擁有的名稱更安全,更簡單。這解決了他回答中提到的問題。我只是在評論中說過這一點,但我沒有要點。這是代碼:


import os


f = 'C:/test.xlsx'

if os.path.exists(f):

    try:

        os.rename(f, f)

        print 'Access on file "' + f +'" is available!'

    except OSError as e:

        print 'Access-error on file "' + f + '"! \n' + str(e)


查看完整回答
反對 回復 2019-12-25
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

您可以使用下一個函數檢查文件上是否有句柄(請記住將完整路徑傳遞給該文件):


import psutil


def has_handle(fpath):

    for proc in psutil.process_iter():

        try:

            for item in proc.open_files():

                if fpath == item.path:

                    return True

        except Exception:

            pass


    return False


查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 1607 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號