【发布时间】:2014-09-15 18:42:39
【问题描述】:
我需要从 Python 运行大量 bash 命令。目前我正在这样做
subprocess.Popen(cmd, shell=True)
是否有任何解决方案可以在同一个 shell 中运行所有这些命令? subprocess.Popen 在每次执行时都会打开一个新的 shell,我需要在每次调用时设置所有必要的变量,以便 cmd 命令正常工作。
【问题讨论】:
-
您运行的每个命令仍然是一个子进程,并且是您的脚本或由您的脚本生成的 shell 的子进程。您需要孩子和脚本之间的外壳吗?
-
在每个 subprocess.Popen 我需要导出一个变量并在同一个调用中运行 cmd 命令。这将产生丑陋的语法。最好只导出一次该变量,然后运行我的 cmd 命令。
-
除非你真的需要使用
subprocess.Popen(),否则你应该使用multiprocessing.Process。 (您的所有作业都是独立且不同步的吗?您是否需要担心在作业序列的中间捕获非零错误状态?) -
OP,你应该告诉我们“很多 bash 命令”是什么。如果它们是可执行文件,则已经使用多处理调用可执行文件;如果它们是 bash 内置程序,那么您无需费力 bash 来执行此操作。你到底想做什么?
-
@smci,嗯?
multiprocessing专门用于子进程也是 Python 的情况,这在此处听起来并非如此。如果你想使用没有 shell 的子进程,subprocess模块就可以了——只是永远不要使用shell=True或将cmd作为字符串传递。
标签: python bash subprocess parent-child popen