首页 > 解决方案 > 用于检索子进程输出的python代码(linux ps命令)

问题描述

我想通过运行linux命令'ps'来创建python3代码来过滤系统进程。

这是我当前的代码:

import subprocess,tempfile
command='ps -fe | grep java'
f = tempfile.NamedTemporaryFile(delete=False)
run = subprocess.Popen([command],shell=True,stdout=f)
f.name

'/tmp/tmpswfw1_c8'

通过运行上面的代码,我们得到一个包含ps列表的文件,其中有一个“java”条目。但是当我cat文件时,长线被剪掉了。例如,如果真正的生产线是:

tomcat   21294     1 41 Jul06 ?        1-14:29:27 /opt/java/bin/java -Xms4096m -Xmx4096m -jar /opt/microservices/apps-0.0.1-SNAPSHOT.jar --spring.profiles.active=staging

这条线正在被tempfilepython处理成:

tomcat   21294     1 41 Jul06 ?        1-14:29:27 /opt/java/bin/java -Xms4096m -Xmx4096m -jar /opt/microservices/apps[[other_chars_are_missing_here]]

当我运行 python 代码时,输​​出文件中的宽度与终端中的宽度相同。

如何正确获得实际输出ps

通过添加编辑:

而且我也得到与subprocess.check_output相同的截断行:

print (subprocess.check_output("ps -fe | grep java", shell=True))

标签: python-3.xsubprocessoutputps

解决方案


我相信这实际上是一个问题ps,而不是 Python。尝试:

print(subprocess.check_output("ps -fe --width 1000 | grep java", shell=True))

或者

print(subprocess.check_output("ps -wwfe | grep java", shell=True))

推荐阅读