如何用Python获取进程对应的打开文件路径(而非应用程序路径)?
获取记事本进程打开的文件路径(而非程序路径)
要获取记事本进程对应的已打开文件路径,你需要解析进程的命令行参数,或者结合窗口标题信息,以下是两种可行方案:
方案1:通过psutil解析命令行参数
记事本(包括UWP版)在打开文件时,会将文件路径作为命令行参数传递,我们可以通过psutil的cmdline()方法提取该路径:
import psutil for proc in psutil.process_iter(['pid', 'name', 'cmdline']): if proc.info['name'] == "Notepad.exe": pid = proc.info['pid'] cmdline_args = proc.info['cmdline'] opened_file = "No file opened" if len(cmdline_args) > 1: # 处理UWP版记事本的-FilePath参数格式 for arg in cmdline_args[1:]: if arg.startswith('-FilePath:'): opened_file = arg.split(':', 1)[1] break # 处理传统桌面版记事本的直接参数格式 if opened_file == "No file opened": opened_file = cmdline_args[1] print(f"Process ID: {pid} => Opened File: {opened_file}")
方案2:结合窗口标题获取(更稳定)
如果命令行参数获取失败(比如权限限制),可以通过pywin32模块读取记事本窗口标题(格式为文件名 - 记事本)来提取文件路径:
首先安装依赖:
pip install pywin32
然后运行代码:
import psutil import win32gui import win32process def get_notepad_files(): # 先收集所有记事本进程的PID notepad_pids = {proc.pid: "No file opened" for proc in psutil.process_iter() if proc.name() == "Notepad.exe"} # 遍历所有窗口,匹配记事本进程的窗口标题 def enum_windows_callback(hwnd, pid_map): window_title = win32gui.GetWindowText(hwnd) if window_title: try: _, pid = win32process.GetWindowThreadProcessId(hwnd) if pid in pid_map: # 解析窗口标题提取文件名 if " - 记事本" in window_title: pid_map[pid] = window_title.split(" - 记事本")[0] except Exception: pass return True win32gui.EnumWindows(enum_windows_callback, notepad_pids) # 输出结果 for pid, file_path in notepad_pids.items(): print(f"Process ID: {pid} => Opened File: {file_path}") get_notepad_files()
注意事项
- 运行脚本需要管理员权限,否则可能无法访问部分进程的敏感信息。
- 若记事本未打开任何文件,会显示
No file opened。 - UWP版记事本的命令行参数格式可能随系统版本调整,若方案1失效,优先使用方案2。
内容的提问来源于stack exchange,提问作者aytas31
相关产品推荐
相关产品推荐

