我想通过运行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))
答案 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))