以下命令在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'

如果shell=True,则会出现以下错误:

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

在我看来,当shell为False时,整个命令似乎被视为一条路径,我不明白为什么subprocess在shell=True时认为存在语法错误.

如何从Python中使用此命令?

推荐答案

您试图运行的命令需要Bash,但subprocess运行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")

不必要地将bash作为其自身的子流程运行,但此时此地即可完成任务.

一个更高效的解决方案可以避免额外的shell,但是也许你应该重构,用一个简单的原生Python web客户端来代替curl.

Python相关问答推荐

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

如何避免Chained when/then分配中的Mypy不兼容类型警告?

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

当独立的网络调用不应该互相阻塞时,'

根据列值添加时区

如何启动下载并在不击中磁盘的情况下呈现响应?

使用Python和文件进行模糊输出

为什么\b在这个正则表达式中不解释为反斜杠

Maya Python脚本将纹理应用于所有对象,而不是选定对象

在输入行运行时停止代码

如何在Gekko中使用分层条件约束

将链中的矩阵乘法应用于多组值

语法错误:文档. evaluate:表达式不是合法表达式

使用SeleniumBase保存和加载Cookie时出现问题

没有内置pip模块的Python3.11--S在做什么?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

当输入是字典时,`pandas. concat`如何工作?

设置索引值每隔17行左右更改的索引

Django更新视图未更新

时间戳上的SOAP头签名无效