无法使用从 cli 运行的命令调用子进程

Unable to call subprocess with command that works from cli

以下命令在 CLI 中运行良好:

bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r /path/coverage.xml

当我使用 shell=False 将相同的命令传递给子进程时,出现以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r /path/coverage.xml'

with shell=True,我得到这个错误:

/bin/sh: -c: line 0: syntax error near unexpected token `('

对我来说,当 shell 为 False 时,整个命令似乎都被视为路径,我不明白为什么 subprocess 在 shell= 时认为存在语法错误没错。

如何让这个命令在 Python 中起作用?

您尝试 运行 的命令需要 Bash,但是 subprocess 运行s sh 除非您另有说明。

p = subprocess.run(
    "bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r /path/coverage.xml",
    shell=True, check=True, text=True,
    executable="/bin/bash")

不需要 运行s bash 作为其自身的子进程,但现在就可以完成工作。

一个更有效的解决方案将避免额外的 shell,但也许您应该重构以使用简单的本机 Python Web 客户端替换 curl