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

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

感谢@ 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 
 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!

来自子流程命令的管道信息与用于获取流程的实际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") 

我被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"