【发布时间】:2018-12-17 22:36:35
【问题描述】:
我想创建 python3 代码,通过运行 linux 命令“ps”来过滤系统进程。
这是我当前的代码:
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))
【问题讨论】:
-
@AntiMatterDynamite 我认为这不是同一个问题。我能够得到输出,但是输出中的一些长行被截断了。
-
那么这可能是环境变量的 grep 问题,查看 `os.environ' 可能有一些东西告诉 grep 截断自己
标签: python-3.x subprocess output ps