如何使用带有管道的\`subprocess\`命令

新手上路,请多包涵

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

原文由 zuberuber 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

要将管道与 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

原文由 Taymon 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者,您始终可以在子流程对象上使用通信方法。

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

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

原文由 jkalivas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏