【发布时间】:2011-03-26 15:33:03
【问题描述】:
我将如何使用 Python 来确定当前正在运行的程序。我在 Windows 上。
【问题讨论】:
-
嘿!欢迎来到 StackOverflow!如果您发布了您尝试过但对您没有用的东西,那将非常有帮助。这让回答问题的人知道您遇到了什么问题。祝你的问题好运!
我将如何使用 Python 来确定当前正在运行的程序。我在 Windows 上。
【问题讨论】:
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!
【讨论】:
感谢@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
【讨论】:
与用于获取进程的实际 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"
【讨论】: