子流程模块中使用的特殊字符

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