将更多/多个参数传递给 Python subprocess.call [重复]
Posted
技术标签:
【中文标题】将更多/多个参数传递给 Python subprocess.call [重复]【英文标题】:Pass more/multiple argument to Python subprocess.call [duplicate] 【发布时间】: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 管道的需要。
【参考方案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 链接的副本已经显示了如何执行此操作。或者您可以阅读 Pythonsubprocess
模块上的文档。有几种有据可查的方法来获取子流程的输出,直接使用check_output
、communicate
或stdout
流。
@Paullo 你到底想做什么,获取正在运行的进程的PID
?以上是关于将更多/多个参数传递给 Python subprocess.call [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有多个参数的函数传递给 python concurrent.futures.ProcessPoolExecutor.map()?