我想获取内存中的进程列表,包括Windows 8.1中的名称和PID。
这是我的代码:
import subprocess
import os
cmd = "WMIC PROCESS get Caption,ProcessId"
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
# Additional logic here
循环永远不会运行。此代码适用于早期版本的Windows 8.是否有人可以推荐不同的方法?
答案 0 :(得分:2)
您可以使用fabolous,跨平台的psutil库,而不是繁琐的subprocess
。
使用通用psutil.process_iter()
将允许您使用它返回的Process
对象执行任何您喜欢的任务(获取名称,pid,过滤您感兴趣的对象等) 。)
E.g。
for proc in psutil.process_iter():
print proc.pid, proc.name
答案 1 :(得分:1)
Shx2,谢谢你的回复。虽然您的解决方案更适合多平台支持,但这是我使用的解决方案,因为我只运行Windows 8.1。
from win32com.client import GetObject
Wmi = GetObject('winmgmts:')
processes = Wmi.InstancesOf('Win32_Process')
# Get the Explorer process
explorer = Wmi.ExecQuery('select * from Win32_Process where Name="explorer.exe"')
# Grab its Pid
processId = explorer[0].Properties_('ProcessId').Value