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

时间:2010-08-07 05:34:07

标签: python windows process

我如何使用Python来确定当前正在运行的程序。我在Windows上。

4 个答案:

答案 0 :(得分:24)

感谢@ hb2pencil for 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

答案 1 :(得分: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!

答案 2 :(得分:7)

与用于获取进程的实际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")

答案 3 :(得分:5)

我使用get_pid_list()拒绝访问权限。一个更新的方法适用于Windows和OSX:

import psutil

for proc in psutil.process_iter():
    try:
        if proc.name() == u"chrome.exe":
            print(proc)
            print proc.cmdline()
    except psutil.AccessDenied:
        print "Permission error or access denied on process"