Ten*_*eej 3 python tasklist python-3.x
我对python很新,但我无法找到我认为应该是一个相对简单的问题的答案.
我正在尝试利用tasklist,我想知道我能用它的输出做什么(比如将它设置为变量,数组,类似的东西).
我正在使用Python 3.3,我在查找文档方面遇到了一些麻烦3.3.
代码相对简单:
import os
os.system("tasklist")
input()
Run Code Online (Sandbox Code Playgroud)
这会打印任务列表,但是我无法将该打印中的数据转换为变量.我假设它与Python有关,而与tasklist无关.
最终,我希望制作一个任务列表条目的矩阵,这样我就可以搜索一个进程,并获取相应的数据.
subprocess.check_output 是最简单的:
(注意我在ps这里使用过,因为我对tasklist你所说的命令没有经验- 尽管有窗口系统的参考...)
>>> import subprocess
>>> res = subprocess.check_output(['ps'])
>>> res
' PID TTY TIME CMD\n 1749 ? 00:00:00 gnome-keyring-d\n 1760 ? 00:00:00 gnome-session\n 1797 ? 00:00:00 ssh-agent\n 1800 ? 00:00:00 dbus-launch\n 1801 ? 00:00:04 dbus-daemon\n 1814 ? 00:00:09 gnome-settings-\n 1819 ? 00:00:00 gvfsd\n 1821 ? 00:00:00 gvfs-fuse-daemo\n 1829 ? 00:11:51 compiz\n 1832 ? 00:00:00 gconfd-2\n 1838 ? 00:00:29 syndaemon\n 1843 ? 00:34:44 pulseaudio\n 1847 ? 00:00:00 gconf-helper\n 1849 ? 00:00:00 gvfsd-metadata\n 1851 ? 00:00:00 bluetooth-apple\n 1852 ? 00:00:04 nautilus\n 1853 ? 00:00:01 nm-applet\n 1855 ? 00:00:00 polkit-gnome-au\n 1856 ? 00:00:00 gnome-fallback-\n 1873'
Run Code Online (Sandbox Code Playgroud)
然后你必须做点什么res才能使用它......
os.system不是常见的 Python 命令。相反,它“调用”更广泛的操作系统:与os.system(foo)进入命令行并键入 大致相同foo。这是一种从 Python 脚本执行任何程序的快速而简单的方法。
当然,有一些非快速且肮脏的方法可以做到这一点。它们位于subprocess模块中,允许您启动任意子进程(其他程序)并与其通信,向其发送数据并接收其输出。
那里有一个快速的快捷函数,它将调用外部程序,检查它是否成功,并返回输出。该函数是subprocess.check_output:
In[20]: [line.split() for line in subprocess.check_output("tasklist").splitlines()]
Out[20]:
[[],
['Image', 'Name', 'PID', 'Session', 'Name', 'Session#', 'Mem', 'Usage'],
['=========================',
'========',
'================',
'===========',
'============'],
['System', 'Idle', 'Process', '0', 'Services', '0', '24', 'K'],
['System', '4', 'Services', '0', '308', 'K'],
['smss.exe', '352', 'Services', '0', '1,628', 'K'],
['csrss.exe', '528', 'Services', '0', '7,088', 'K'],
['wininit.exe', '592', 'Services', '0', '6,928', 'K'],
['csrss.exe', '600', 'Console', '1', '79,396', 'K'],
['services.exe', '652', 'Services', '0', '19,320', 'K'],
...
Run Code Online (Sandbox Code Playgroud)
根据其他一些答案...
import subprocess
import re
def get_processes_running():
""" Takes tasklist output and parses the table into a dict
Example:
C:\Users\User>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 43,064 K
smss.exe 400 Services 0 1,548 K
csrss.exe 564 Services 0 6,144 K
wininit.exe 652 Services 0 5,044 K
csrss.exe 676 Console 1 9,392 K
services.exe 708 Services 0 17,944 K
lsass.exe 728 Services 0 16,780 K
winlogon.exe 760 Console 1 8,264 K
# ... etc...
Returns:
[ {'image': 'System Idle Process', 'mem_usage': '24 K', 'pid': '0', 'session_name': 'Services', 'session_num': '0'},
{'image': 'System', 'mem_usage': '43,064 K', 'pid': '4', 'session_name': 'Services', 'session_num': '0'},
{'image': 'smss.exe', 'mem_usage': '1,548 K', 'pid': '400', 'session_name': 'Services', 'session_num': '0'},
{'image': 'csrss.exe', 'mem_usage': '6,144 K', 'pid': '564', 'session_name': 'Services', 'session_num': '0'},
{'image': 'wininit.exe', 'mem_usage': '5,044 K', 'pid': '652', 'session_name': 'Services', 'session_num': '0'},
{'image': 'csrss.exe', 'mem_usage': '9,392 K', 'pid': '676', 'session_name': 'Console', 'session_num': '1'},
{'image': 'services.exe', 'mem_usage': '17,892 K', 'pid': '708', 'session_name': 'Services', 'session_num': '0'},
{'image': 'lsass.exe', 'mem_usage': '16,764 K', 'pid': '728', 'session_name': 'Services', 'session_num': '0'},
{'image': 'winlogon.exe', 'mem_usage': '8,264 K', 'pid': '760', 'session_name': 'Console', 'session_num': '1'},
#... etc...
]
"""
tasks = subprocess.check_output(['tasklist']).split("\r\n")
p = []
for task in tasks:
m = re.match("(.+?) +(\d+) (.+?) +(\d+) +(\d+.* K).*",task)
if m is not None:
p.append({"image":m.group(1),
"pid":m.group(2),
"session_name":m.group(3),
"session_num":m.group(4),
"mem_usage":m.group(5)
})
return p
Run Code Online (Sandbox Code Playgroud)