python-3.x - 用于检索子进程输出的python代码(linux 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
这条线正在被tempfile
python处理成:
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))
解决方案
我相信这实际上是一个问题ps
,而不是 Python。尝试:
print(subprocess.check_output("ps -fe --width 1000 | grep java", shell=True))
或者
print(subprocess.check_output("ps -wwfe | grep java", shell=True))
推荐阅读
- image - MATLAB图像区分/比较
- postman - Newman:未知编码:在 AWS CodeBuild 上运行 Newman cli 时弹出 latin1
- selenium-webdriver - Jmeter WebDriverSampler 因 Chromedriver 无头而失败
- angular - 在 Angular 中使用“renderer/renderer2”来获取组件中 DOM 输入的值
- python - MariaDB / MySQL INSERT INTO / ON DUPLICATE KEY UPDATE 在 Python 中
- python-3.x - GCP 中的训练对象检测终止于:TypeError: Expected binary or unicode string, got None
- dynamics-crm - 如何将插件添加到 xrmtoolbox
- r - 将 ks.test、var.test、t.test 和 wilcox.test 组合成类似决策树的函数或 r 中的 if else 函数
- javascript - 在桌面/移动设备上自定义 owl-carousel 2
- asp.net - 在 aspcore 中调用存储过程而不是返回自定义消息