理想情况下,它应该像我想要执行的命令列表,而且我希望使用单个子进程调用来执行所有命令。我能够通过将所有命令存储为shell脚本并使用subprocess调用该脚本来实现类似的功能,但我想要一个纯Python解决方案。我将使用shell=True执行这些命令,并理解其中的风险。
理想情况下,它应该像我想要执行的命令列表,而且我希望使用单个子进程调用来执行所有命令。我能够通过将所有命令存储为shell脚本并使用subprocess调用该脚本来实现类似的功能,但我想要一个纯Python解决方案。我将使用shell=True执行这些命令,并理解其中的风险。
>>> import subprocess
>>> result = subprocess.run('echo Hello ; echo World', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> result
CompletedProcess(args='echo Hello ; echo World', returncode=0, stdout=b'Hello\nWorld\n')
从技术上讲,这不是一个纯Python解决方案,因为有shell=True
。实际上,参数处理是由shell完成的。(您可以将其视为执行/bin/sh -c“$your_arguments”
)
如果您想要一个更加纯净的解决方案,您需要使用shell=False
并循环处理多个命令。据我所知,没有直接使用subprocess模块启动多个子进程的方法。
exec()
系统调用,我会认为它更加纯粹,就像OP想要的那样。 - Pavel Gurkov
&
/;
/&&
来链接这些命令吗?为什么只用单个子进程调用呢 - 为什么不使用循环,这样可以更好地控制,例如提前终止? - ryachza;
将它们按顺序连接起来:subprocess.call("do_A ; do_B ; do_C ; ", shell=True)
。以编程方式实现:call(' ; '.join(commands), shell=True)
。 - Bakuriup = call("bash", stdin=PIPE); p.communicate("\n".join(commands))
。 - Bakuriu