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

时间:2016-09-19 09:53:20

标签: python windows file

我在使用其中一个脚本时出现问题,它不正确地写入自己的日志时出现问题,抛出错误&#34;此文件正由另一个进程使用。&#34; < / p>

我知道有一些方法可以通过尝试排除这一点来解决这个问题,但我想找出为什么这种情况正在发生,而不仅仅是通过它来解决。根本不应该访问该文件。因此,为了确认错误的来源,我想找出使用​​该文件的服务。

Windows上的Python有没有办法检查使用给定文件的进程?

1 个答案:

答案 0 :(得分:1)

您可以使用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文件名有限制。在Python 2中,子进程将name作为ANSI字符串传递,因为它调用CreateProcessA而不是CreateProcessW。在Python 3中,名称作为Unicode传递。在任何一种情况下,handle.exe都使用有损的ANSI编码写入其输出,因此结果元组中匹配的文件名可能包含最合适的字符和“?”替代品。