我在使用其中一个脚本时出现问题,它不正确地写入自己的日志时出现问题,抛出错误&#34;此文件正由另一个进程使用。&#34; < / p>
我知道有一些方法可以通过尝试排除这一点来解决这个问题,但我想找出为什么这种情况正在发生,而不仅仅是通过它来解决。根本不应该访问该文件。因此,为了确认错误的来源,我想找出使用该文件的服务。
Windows上的Python有没有办法检查使用给定文件的进程?
答案 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编码写入其输出,因此结果元组中匹配的文件名可能包含最合适的字符和“?”替代品。