子流程模块中使用的特殊字符
Special characters to be used in subprocess module
在 python、
的子流程模块中
subprocess.Popen(
(
"git",
"add",
"-A",
"&&",
"git",
"commit",
"-m",
commit_message
),
cwd=path,
)
不起作用。
但是,如果我将其拆分为
subprocess.Popen(( "git", "add","-A") , cwd=path)
和
subprocess.Popen(( "git", "commit","-m" , "yeah") , cwd=path)
有效。如何在中间插入“&&”?谢谢
&&
逻辑运算符是 shell(例如,bash)可以理解的东西。但是,您执行的 git 不理解 &&
的含义。换句话说,您正在输入参数,就像将它们输入终端一样。默认情况下,subprocess.Popen
不会调用 shell,而是使用指定的参数调用 exec
系统调用。所以,你用参数 运行 git
告诉它 add
,-A
(到目前为止,还不错),&&
(git不明白这个),git
,-m
,和yeah
。
要将此作为 shell 命令执行,您需要将 shell=True
添加到 subprocess.Popen
。一旦你这样做了,你就可以将你想要的命令作为一个字符串键入:
subprocess.Popen('git add -A && git commit -m', shell=true, cwd=path)
只有shell可以解释&&
,它不是程序也不是参数
您可以在类似 mini-shell 的环境中将 shell=True
传递到 subprocess.Popen
到 运行 您的命令,请参阅 docs here
在 python、
的子流程模块中 subprocess.Popen(
(
"git",
"add",
"-A",
"&&",
"git",
"commit",
"-m",
commit_message
),
cwd=path,
)
不起作用。 但是,如果我将其拆分为
subprocess.Popen(( "git", "add","-A") , cwd=path)
和
subprocess.Popen(( "git", "commit","-m" , "yeah") , cwd=path)
有效。如何在中间插入“&&”?谢谢
&&
逻辑运算符是 shell(例如,bash)可以理解的东西。但是,您执行的 git 不理解 &&
的含义。换句话说,您正在输入参数,就像将它们输入终端一样。默认情况下,subprocess.Popen
不会调用 shell,而是使用指定的参数调用 exec
系统调用。所以,你用参数 运行 git
告诉它 add
,-A
(到目前为止,还不错),&&
(git不明白这个),git
,-m
,和yeah
。
要将此作为 shell 命令执行,您需要将 shell=True
添加到 subprocess.Popen
。一旦你这样做了,你就可以将你想要的命令作为一个字符串键入:
subprocess.Popen('git add -A && git commit -m', shell=true, cwd=path)
只有shell可以解释&&
,它不是程序也不是参数
您可以在类似 mini-shell 的环境中将 shell=True
传递到 subprocess.Popen
到 运行 您的命令,请参阅 docs here