python - Python subprocess.run shell kwarg 行为
问题描述
shell
关于关键字参数有很多问题。但我仍然不明白,特别是如果我们使用序列参数而不是字符串。
我的理解是,如果shell=False
,subprocess
模块将在其中运行可执行文件args[0]
并将其余部分作为参数传递给可执行文件。但是如果我们用 运行它shell=True
,它会像"sh -c {}".format(format_escaping(args))
.
但是为什么会这样呢?
# Ran in OSX
subprocess.run(["touch", "12; touch 34"]) # successfuly make the file '12; touch 34'
subprocess.run(["touch", "56; touch 78"], shell=True) # does not work:
# usage:
# touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
# CompletedProcess(args=['touch', '123; touch 456'], returncode=1)
究竟发生了subprocess.run(["touch", "56; touch 79"], shell=True)
什么?
解决方案
我认为shell=True
supbrocess 仅首先运行第一个parameter
,touch
因此您将成为命令的帮助消息,请改为这样尝试:
subprocess.run("touch 56; touch 78", shell=True)