为了账号安全,请及时绑定邮箱和手机立即绑定

如何在管道中使用`subprocess`命令

/ 猿问

如何在管道中使用`subprocess`命令

繁星点点滴滴 2019-10-12 11:07:16

如何在管道中使用`subprocess`命令

我想subprocess.check_output()ps -A | grep 'process_name'。我尝试了各种解决方案,但到目前为止没有任 有人可以指导我怎么做吗?


查看完整描述

3 回答

?
海绵宝宝撒

要使用带subprocess模块的管道,您必须通过shell=True

但是,由于各种原因,这并不是真的可取,尤其是安全性。相反,单独创建psgrep处理,并将输出从一个管道传输到另一个,如下所示:

ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)ps.wait()

但是,在您的特定情况下,简单的解决方案是调用subprocess.check_output(('ps', '-A'))然后str.find输出。



查看完整回答
反对 回复 2019-10-13
?
四季花海

或者,您始终可以在子进程对象上使用communic方法。

cmd = "ps -A|grep 'process_name'"ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)output = ps.communicate()[0]print output

communic方法返回标准输出的元组和标准错误。


查看完整回答
反对 回复 2019-10-13
?
慕盖茨4494581

请参阅有关使用子流程设置管道的文档:http//docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

我没有测试过以下代码示例,但它应该大致是您想要的:

query = "process_name"ps_process = Popen(["ps", "-A"], stdout=PIPE)grep_process = Popen(["grep", query], stdin=ps_process.stdout, stdout=PIPE)ps_process.stdout.close()  # Allow ps_process to receive a SIGPIPE if grep_process exits.output = grep_process.communicate()[0]



查看完整回答
反对 回复 2019-10-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信