给定文件正在使用的进程是什么?

2024-05-14 23:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一个脚本遇到了问题,它似乎不稳定地无法写入自己的日志,抛出错误“这个文件正被另一个进程使用”

我知道有很多方法可以解决这个问题,但是我想找出为什么会发生这种情况,而不是仅仅把它掩盖起来。其他任何东西都不应该访问该文件。因此,为了确认错误的来源,我想知道什么服务正在使用该文件。你知道吗

在Windows上Python中有没有一种方法可以检查使用给定文件的进程?你知道吗


Tags: 文件方法脚本进程windows错误来源情况
1条回答
网友
1楼 · 发布于 2024-05-14 23:51:35

您可以使用Microsoft的handle.exe命令行实用程序。例如:

import re
import subprocess

_handle_pat = re.compile(r'(.*?)\s+pid:\s+(\d+).*[0-9a-fA-F]+:\s+(.*)')

def open_files(name):
    """return a list of (process_name, pid, filename) tuples for
       open files matching the given name."""
    lines = subprocess.check_output('handle.exe "%s"' % name).splitlines()
    results = (_handle_pat.match(line.decode('mbcs')) for line in lines)
    return [m.groups() for m in results if m]

请注意,这对Unicode文件名有限制。在python2中,子进程将name作为ANSI字符串传递,因为它调用CreateProcessA,而不是CreateProcessW。在python3中,名称作为Unicode传递。无论哪种情况,句柄.exe使用有损ANSI编码写入其输出,因此结果元组中匹配的文件名可能包含最佳匹配字符和“?”替代品。你知道吗

相关问题 更多 >

    热门问题