以下命令在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相关问答推荐

While 循环不工作(函数和 Time.Sleep)

我通过postman 获得状态代码 200,但通过 request.get 我获得状态代码 500

二分搜索:没有得到非常大的值的上限和下限

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

Pandas :列的值,然后按相同的 ID 分组和合并

python [0] * 3 如何独立但 [[0] * 3] * 3 每个子列表是同一个对象?

如何将一列的所有项目移动到Pandas 中的列?

如何在python中格式化非常小的数字?

Pandas:使用带有字符串变量的 df.eval 作为条件过滤

Pandas df 按计数元素分组

Pytesseract image_to_data 无法读取我图像中的数字

如何将过滤的分组聚合的结果分配为原始 Pandas DataFrame 中的新列

将负数四舍五入到最接近零的 1,000

根据组内的条件过滤 Pandas Groupby 中的行

范围内的cumsum(python,pandas)

将 XML 数据展平为 pandas 数据框

在 Pandas 中转置列和排名值

如何使用python将数据转储到Json文件中

python:比较字典以在缺少项目时返回 keyError

Tensorflow 中的高效池化操作:自定义池化层