在Python中确定正在运行的程序

20 投票
4 回答
29517 浏览
提问于 2025-04-16 02:27

我想知道怎么用Python来查看现在正在运行的程序。我是在Windows系统上。

4 个回答

8

从子进程命令获取信息并不是最理想的方式,建议使用一个专门的Python工具来获取进程信息。可以试试psutil这个模块。要获取进程编号的列表,可以这样做:

psutil.get_pid_list()

不过你需要在网上下载这个模块,它不包含在Python的默认安装包里,但这是解决你问题的更好方法。要获取某个进程的名称,可以使用这个编号:

psutil.Process(<number>).name

这应该就是你想要的结果。此外,这里有一种方法可以检查某个特定的进程是否正在运行:

def process_exists(name):
    i = psutil.get_pid_list()
    for a in i:
        try:
            if str(psutil.Process(a).name) == name:
                return True
        except:
            pass
    return False

这个方法是通过可执行文件的名称来查找的,比如说,如果你想找到一个powershell窗口,可以这样做:

process_exists("powershell.exe")
11
import os
os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')
f = open("C:\ProcessList.txt")
plist = f.readlines()
f.close()

现在,plist包含一个格式化的、用空格分开的进程列表:

  • 第一列是正在运行的可执行文件的名称
  • 第二列是代表正在运行的进程的命令
  • 第三列是进程的ID

用Python来解析这个应该很简单。请注意,数据的第一行是列的标签,而不是实际的进程。

请注意,这种方法只适用于Windows系统!

26

感谢@hb2pencil提供的WMIC命令!下面是如何在不使用文件的情况下将输出结果传递下去的方法:

import subprocess
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
    print line

撰写回答