如何使用Python获取进程的命令行信息?
我来帮你解决这个问题!既然你已经有能用的PowerShell命令,其实在Python里有几种靠谱的实现方式,下面给你逐一说明:
方案1:直接调用你的PowerShell命令(最省心的方式)
既然你的PowerShell代码已经验证可行,我们可以用Python的subprocess模块直接调用它,捕获输出结果:
import subprocess def get_process_cmdline(process_name): # 构造PowerShell命令,用-ExpandProperty直接提取纯文本命令行 ps_command = f"""Get-CimInstance Win32_Process -Filter "name = '{process_name}'" | select -ExpandProperty CommandLine""" # 执行命令并捕获输出 result = subprocess.run( ["powershell", "-Command", ps_command], capture_output=True, text=True, check=True ) # 处理输出,去除多余换行和空白 cmdline = result.stdout.strip() return cmdline if cmdline else "未找到该进程或无命令行信息" # 调用示例,记得替换成你实际的进程名 print(get_process_cmdline("process.exe"))
方案2:用psutil库(更Python化的跨平台方案)
psutil是一款非常好用的跨平台进程管理库,Windows下也能完美运行。先安装它:pip install psutil,然后用下面的代码:
import psutil def get_process_cmdline_psutil(process_name): for proc in psutil.process_iter(['name', 'cmdline']): try: # 忽略大小写匹配进程名 if proc.info['name'].lower() == process_name.lower(): # 拼接命令行列表为字符串 return ' '.join(proc.info['cmdline']) if proc.info['cmdline'] else "无命令行信息" except (psutil.NoSuchProcess, psutil.AccessDenied): # 跳过无权限访问或已结束的进程 continue return "未找到该进程" # 调用示例 print(get_process_cmdline_psutil("process.exe"))
这个方法不需要依赖PowerShell,直接通过Python API获取,而且跨平台,如果你以后需要在Linux/macOS上复用代码也能兼容。
方案3:用pywin32调用Windows原生API
如果你想直接调用Windows系统底层API,可以用pywin32库。先安装:pip install pywin32,代码示例如下:
import win32process import win32api import win32con def get_process_cmdline_win32(process_name): # 遍历所有进程ID for pid in win32process.EnumProcesses(): if pid == 0: continue try: # 获取进程句柄(需要查询信息和内存读取权限) handle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, pid) # 获取进程完整路径,提取短进程名 exe_full_path = win32process.GetModuleFileNameEx(handle, 0) exe_short_name = exe_full_path.split('\\')[-1] if exe_short_name.lower() == process_name.lower(): # 读取命令行信息 cmdline = win32process.GetCommandLine(handle) win32api.CloseHandle(handle) return cmdline win32api.CloseHandle(handle) except (win32api.error, win32process.error): # 跳过无权限访问的进程 continue return "未找到该进程或无权限访问" # 调用示例 print(get_process_cmdline_win32("process.exe"))
这个方法最贴近Windows底层,但需要处理权限问题,部分系统进程可能会拒绝访问。
你可以根据自己的需求选择合适的方案,个人推荐方案2,代码简洁还具备跨平台兼容性~
内容的提问来源于stack exchange,提问作者yletz xyz




