用于检索子进程输出的python代码(linux ps命令)

时间:2018-07-10 07:11:24

标签: python-3.x subprocess output 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

此行被python处理为tempfile,如下:

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))

1 个答案:

答案 0 :(得分:0)

我认为这实际上是ps的问题,而不是Python的问题。试试:

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

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