我如何使用Python来确定当前正在运行的程序。我在Windows上。
答案 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包含一个格式化的以空格分隔的进程列表:
这应该很容易用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"