将更多/多个参数传递给 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 链接的副本已经显示了如何执行此操作。或者您可以阅读 Python subprocess 模块上的文档。有几种有据可查的方法来获取子流程的输出,直接使用check_outputcommunicatestdout 流。 @Paullo 你到底想做什么,获取正在运行的进程的PID

以上是关于将更多/多个参数传递给 Python subprocess.call [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何将多个参数传递给属性 getter?

如何将具有多个参数的函数传递给 python concurrent.futures.ProcessPoolExecutor.map()?

如何将参数传递给 Python 模块中的主函数?

将一个值列表而不是多个参数传递给函数?

将参数传递给夹具函数

在Python中将多个参数传递给pool.map()函数[重复]