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

Posted

技术标签:

【中文标题】用于检索子进程输出的python代码(linux ps命令)【英文标题】:python code for retrieving output of subprocess (linux ps command) 【发布时间】: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))

【问题讨论】:

这是***.com/questions/1996518/…的副本 @AntiMatterDynamite 我认为这不是同一个问题。我能够得到输出,但是输出中的一些长行被截断了。 那么这可能是环境变量的 grep 问题,查看 `os.environ' 可能有一些东西告诉 grep 截断自己 【参考方案1】:

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

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

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

【讨论】:

谢谢奥利弗。它解决了这个问题。但是命令'ps -fe | bash/shell 中的 grep java' 可以在终端或文件中输出正确的行,我不明白 python 在从上游(ps 或 shell)获取这些输入时如何截断它? 很高兴我能帮上忙。我以前对这个问题感到沮丧,不明白为什么会这样。

以上是关于用于检索子进程输出的python代码(linux ps命令)的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase中检索子(自动增量)名称

NSFetchedResultsController, NSPredicate 以对多关系检索子对象

MongodB 通过属性名称检索子文档

使用自动布局检索子视图的正确位置

检索子值 Failed-Firebase- Android

使用 DOM 解析器根据父节点属性检索子节点值