Linux上的进程列表通过Python

Mad*_*bie 85 python linux

如何在Linux上使用Python运行进程列表?

bob*_*nce 124

IMO查看/proc文件系统不像黑客文本输出那样讨厌ps.

import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]

for pid in pids:
    try:
        print open(os.path.join('/proc', pid, 'cmdline'), 'rb').read().split('\0')
    except IOError: # proc has already terminated
        continue
Run Code Online (Sandbox Code Playgroud)

  • / proc为+1,这就是它的用途.http://linux.die.net/man/5/proc (18认同)
  • 您必须使用try/except块包围read()调用,因为读取cmdline时读取os.listdir('/ proc')返回的pid可能不再存在. (9认同)
  • -1为/ proc,因为它不可移植,并且有更好的接口可用 (5认同)
  • 最后!验证!现在我可以停下来!:-) (4认同)
  • 注意:命令行以0x00结束.空格也被替换为相同的字符. (2认同)
  • 只需使用`psutil` - 它通过一个漂亮的Pythonic接口完成所有这一切,并且如果你想在非Linux服务器上运行,它是可移植的. (2认同)

ent*_*ast 78

您可以使用psutil作为独立于平台的解决方案!

import psutil
psutil.pids()

[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358, 
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235, 
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
Run Code Online (Sandbox Code Playgroud)

  • 它不是完全独立于平台 - 在OSX上,您可能遇到AccessDenied错误:https://groups.google.com/forum/?fromgroups =#!topic/psutil/sbsjpawhiWms (5认同)
  • 只需看一下[文档](http://code.google.com/p/psutil/wiki/Documentation). (2认同)

ars*_*ars 8

您可以使用第三方库,例如PSI:

PSI是一个Python包,提供对进程和其他各种系统信息(如体系结构,引导时和文件系统)的实时访问.它有一个pythonic API,它在所有支持的平台上都是一致的,但也会在需要的地方公开特定于平台的细节.

  • PSI最后一次更新是在2009年,而psutil本月更新(2015年11月) - 似乎psutil是一个更好的选择. (2认同)

Mat*_*att 7

制定和使用子进程的制裁方法是通过子进程模块.

import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Run Code Online (Sandbox Code Playgroud)

该命令被分解为一个python参数列表,因此它不需要在shell中运行(默认情况下,subprocess.Popen不使用它只执行它的任何类型的shell环境).因此,我们不能简单地向Popen提供'ps -U 0'.


ext*_*eon 0

我将使用subprocess模块来执行具有适当选项的命令ps。通过添加选项,您可以修改您看到的进程。很多关于 SO 子流程的例子。这个问题回答了如何解析输出ps回答了如何解析例如

正如示例答案之一所示,您还可以使用PSI模块来访问系统信息(例如本示例中的进程表)。