为了账号安全,请及时绑定邮箱和手机立即绑定

在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 关注
  • 1572 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号