试图找出文件是否正在被另一个进程使用的问题是竞争条件的可能性。您可以检查一个文件,确定它未被使用,然后在打开它之前,另一个进程(或线程)会跳入并抓住它(甚至删除它)。
好的,假设您决定忍受这种可能性,并希望不会发生。检查其他进程正在使用的文件取决于 *** 作系统。
在Linux上,这很简单,只需遍历/ proc中的PID。这是一个生成器,用于迭代用于特定PID的文件:
def iterate_fds(pid): dir = '/proc/'+str(pid)+'/fd' if not os.access(dir,os.R_OK|os.X_OK): return for fds in os.listdir(dir): for fd in fds: full_name = os.path.join(dir, fd) try: file = os.readlink(full_name) if file == '/dev/null' or re.match(r'pipe:[d+]',file) or re.match(r'socket:[d+]',file): file = None except OSError as err: if err.errno == 2: file = None else: raise(err) yield (fd,file)
在Windows上,它不是那么简单,API尚未发布。有一个
handle.exe可以使用的sysinternals工具(),但我建议使用PyPi模块
psutil,该模块是可移植的(即,它也可以在Linux上运行,并且可能在其他OS上运行):
import psutilfor proc in psutil.process_iter(): try: # this returns the list of opened files by the current process flist = proc.open_files() if flist: print(proc.pid,proc.name) for nt in flist: print("t",nt.path) # This catches a race condition where a process ends # before we can examine its files except psutil.NoSuchProcess as err: print("****",err)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)