You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动