我想使用subprocess.check_output() ps -A | grep 'process_name'。 我尝试了各种解决方案,但到目前为止都没用。有人能指导我怎么做吗?
当前回答
或者始终可以在子进程对象上使用communication方法。
cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)
communication方法返回一个由标准输出和标准错误组成的元组。
其他回答
要将管道与子进程模块一起使用,必须传递shell=True。
然而,出于各种原因,这确实是不可取的,尤其是安全性。相反,分别创建ps和grep进程,并将输出从一个管道到另一个,如下所示:
ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)
ps.wait()
然而,在您的特定情况下,简单的解决方案是调用子进程。check_output(('ps', '-A')),然后输出str.find。
或者始终可以在子进程对象上使用communication方法。
cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)
communication方法返回一个由标准输出和标准错误组成的元组。
你可以尝试sh.py中的管道功能:
import sh
print sh.grep(sh.ps("-ax"), "process_name")
使用来自subprocess.run的输入,您可以将一个命令的输出传递给第二个命令。
import subprocess
ps = subprocess.run(['ps', '-A'], check=True, capture_output=True)
processNames = subprocess.run(['grep', 'process_name'],
input=ps.stdout, capture_output=True)
print(processNames.stdout.decode('utf-8').strip())
command = "ps -A | grep 'process_name'"
output = subprocess.check_output(["bash", "-c", command])
推荐文章
- 把if-elif-else语句放在一行中?
- 我如何结合两个数据框架?
- 如何计数列表中唯一值的出现
- 为什么Pycharm的检查人员抱怨“d ={}”?
- 如何JSON序列化集?
- Linux删除大小为0的文件
- 在python中,年龄从出生日期开始
- 使用pip安装SciPy
- 在Python中,我应该如何测试变量是否为None, True或False
- 如何在Python中从毫秒创建datetime ?
- 如何解窝(爆炸)在一个熊猫数据帧列,成多行
- 如何使用pip安装opencv ?
- 在pip冻结命令的输出中“pkg-resources==0.0.0”是什么
- 格式y轴为百分比
- 熊猫连接问题:列重叠但没有指定后缀