当前位置: 首页 > 编程笔记 >

Python用access判断文件是否被占用的实例方法

仉刚洁
2023-03-14
本文向大家介绍Python用access判断文件是否被占用的实例方法,包括了Python用access判断文件是否被占用的实例方法的使用技巧和注意事项,需要的朋友参考一下

有的小伙伴想知道用access()函数可以判断一个文件被占用吗?理论上来说是不行的,access()返回的是文件的读写属性。为了让小伙伴们信服,小编进行了简单的测试。

>>> import os
>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件
>>> os.access(fn, os.F_OK) # 文件是否存在
True
>>> os.access(fn, os.R_OK) # 文件是否可读
True
>>> os.access(fn, os.W_OK) # 文件是否可写
True
>>> os.access(fn, os.X_OK) # 文件是否可执行
True
>>> fp = open(fn, 'a+') # 以追加写的方式打开文件
>>> os.access(fn, os.F_OK) # 文件当然还在
True
>>> os.access(fn, os.R_OK) # 文件依然可读
True
>>> os.access(fn, os.W_OK) # 文件依然可写
True
>>> os.access(fn, os.X_OK) # 文件依然执行
True
>>> fp.close()

可见,os.access()返回的是文件读写属性,与文件是否被占用没有半毛钱关系。

后来,群里有同学建议说,不妨用try尝试着open文件,如果成功,表示文件没有被占用,如果抛出异常,则表示文件被占用。果真如此吗?还是用代码验证一下吧。

>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()

结果表明,对同一个文件以写的方式打开多次,系统并没有抛出异常。为什么会这样呢?究其原因,是因为文件被打开和文件被占用是完全两个不同的问题。顺便提醒一下,做上面的测试时,不要使用'w'的方式,否则文件内容会被清空。

那么,究竟应该如何用Python判断一个文件是否被占用呢?这个问题还是要回归到操作系统层面来解决,也就是依赖win32api模块。

>>> import win32file
>>> def is_used(file_name):
  try:
    vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
    return int(vHandle) == win32file.INVALID_HANDLE_VALUE
  except:
    return True
  finally:
    try:
      win32file.CloseHandle(vHandle)
    except:
      pass
>>> fn = r'D:\temp\csdn\t.py'
>>> is_used(fn)
False
>>> fp = open(fn, 'a+')
>>> is_used(fn)
True
>>> fp.close()
>>> is_used(fn)
False

简单验证了一下,函数is_used()基本可用。

到此这篇关于Python用access判断文件是否被占用的实例方法的文章就介绍到这了,更多相关Python怎样用access判断文件是否被占用内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 请问Linux中,如何持续判断C++程序文件是否被占用?(类似flock -w的方式)以及判断程序被一个或多个进程占用时,如何主动优雅关闭进程并替换程序文件?直接获取pid并kill是否可行?(程序中没有定义其他锁操作) 尝试了使用flock -x -w的方式去探测程序文件,但是返回“flock: cannot open lock file filename: Text file busy”,而且

  • 本文向大家介绍对python判断是否回文数的实例详解,包括了对python判断是否回文数的实例详解的使用技巧和注意事项,需要的朋友参考一下 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 上面的解释就是说回文数和逆序后的结果是相等的。这就是判断一个数值是否是回文数的标准。

  • 本文向大家介绍javascript判断文件是否存在实例代码,包括了javascript判断文件是否存在实例代码的使用技巧和注意事项,需要的朋友参考一下  javascript判断文件是否存在 1. 客户端 2. 服务器端  感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍Python判断中文字符串是否相等的实例,包括了Python判断中文字符串是否相等的实例的使用技巧和注意事项,需要的朋友参考一下 Python判断两个相等的中文字符串为false,将两个待比较的字符串都把unicode编码设为‘utf-8'也不能解决问题,具体原因如下: 1.首先查看待比较两个字符串的编码格式 ,使用命令 比较两个字符串的编码结果,如下图所示 一个编码格式为‘UTF-

  • 本文向大家介绍nginx try_files指令判断文件是否存在实例,包括了nginx try_files指令判断文件是否存在实例的使用技巧和注意事项,需要的朋友参考一下 现在有这样一个需求,网站根目录下有静态文件,static目录下也有静态文件,static目录下的静态文件是程序批量生成的,我想让nginx在地址不变的前提下优先使用static目录里面的文件,如果不存在再使用根目录下的静态文件,

  • 本文向大家介绍Python判断变量是否是None写法代码实例,包括了Python判断变量是否是None写法代码实例的使用技巧和注意事项,需要的朋友参考一下 代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`; 第二种是 `if not x:`; 第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`)