【问题标题】:Pass more/multiple argument to Python subprocess.call [duplicate]将更多/多个参数传递给 Python subprocess.call [重复]
【发布时间】:2018-06-29 12:37:11
【问题描述】:

我可以运行ps aux | grep python_script.py 并获取运行脚本的进程的详细信息。我希望能够从 python 脚本运行相同的命令。

from subprocess import call
call(["ps", "aux"])

效果很好,但是尝试了这些行但都返回错误,

call(["ps", "aux", "|", "grep", "python_script.py"])
call(["ps", "aux", "| grep python_script.py"])

返回错误,谁能告诉我如何从命令行运行ps aux | grep python_script.py

【问题讨论】:

  • 请仔细阅读 b4 评论,我询问如何传递更多参数,这是一个简单的案例,不适用于我。我已经看到了该解决方案,但仍然没有解决我的问题。简单的 call(["ps", "aux"]) 有效,但我有更多的参数要传递
  • 为什么你使用grep 而不是仅仅在Python 代码中过滤ps 输出?这将完全避免对 shell 管道的需要。

标签: python shell subprocess


【解决方案1】:

如果您不太考虑安全性,可以将shell 参数设置为True。然后它将代替list,以string 作为命令。这样,它就像一个贝壳。

from subprocess import call
call("ps aux | grep python_script.py", shell=True)

【讨论】:

  • 感谢@user1767754 有效,请问有没有办法可以将返回的值传递给一个值,并可能从返回的列表中确定正确的 PID。我试过 result = call("ps aux | grep python_script.py", shell=True)。但是打印(结果)是 0
  • 链接的副本已经显示了如何执行此操作。或者您可以阅读 Python subprocess 模块上的文档。有几种有据可查的方法来获取子流程的输出,直接使用check_outputcommunicatestdout 流。
  • @Paullo 你到底想做什么,获取正在运行的进程的PID
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2014-10-22
  • 2018-10-29
  • 1970-01-01
相关资源
最近更新 更多