我目前正在运行:
ps -f -u vinish | sort -k5
但如果不在我的代码中编写相同的引用命令,我怎么能在Python中执行此操作?
为了执行bash命令,我使用os.system('<cmd>')
或通过subprocess
进行调用,但我正在查找不会包含任何bash命令的内容。
答案 0 :(得分:1)
您只需对subprocess.check_output()
的输出进行排序:
import subprocess
processes = subprocess.check_output(['ps', '-f', '-u', 'vinish'])
for line in sorted(processes.splitlines(), key=lambda l: int(l.split()[1])):
print(line)
这在sort -k5
输出上更好,因为它提取第二列并对其进行数字排序。
请注意,没有创建子shell(此处没有执行 bash命令); Python直接执行ps
命令。这是在不安装第三方库的情况下获取流程信息的最简单方法。
如果您真的想避免执行外部命令,则必须使用附加库。我在这里推荐psutil
library:
import psutil
matching = [proc for proc in psutil.process_iter() if proc.username() == 'vinish']
for proc in sorted(matching, key=lambda p: p.pid):
print(proc)
有关每个proc
对象提供的信息和功能方式的详细信息,请参阅psutil.Process()
class documentation。