用于检索子进程输出的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命令)的主要内容,如果未能解决你的问题,请参考以下文章