Groovy调用curl时输出为何进入错误流而非标准输出且退出码为0?
原因说明
这个现象和Groovy本身没有关系,是curl官方的输出设计逻辑导致的:
- curl默认会将进度信息、运行诊断类内容输出到标准错误流(stderr),只有用户主动要求输出的接口响应内容才会写入标准输出流(stdout)
- 你的命令使用了
-O参数,作用是把下载的资源直接写入本地同名文件,不会把文件内容输出到标准输出,所以stdout是空的 - 你在错误流中看到的下载进度条属于curl的运行诊断内容,默认就是走stderr输出,和请求是否成功、退出码是否为0没有关联。
解决方案
如果不需要进度信息输出,可以给curl添加-s(静默模式)参数关闭进度和非必要提示,如果需要保留错误提示可以搭配-S参数使用:
// 示例:添加静默参数关闭进度输出 def command = ["curl", "-sLO", "https://curl.se/download/curl-7.79.1.tar.gz"]
如果需要把进度信息也重定向到标准输出,可以添加shell重定向规则,需要改为通过shell执行命令:
def command = ["bash", "-c", "curl -LO https://curl.se/download/curl-7.79.1.tar.gz 2>&1"]
内容的提问来源于stack exchange,提问作者u123
相关产品推荐
相关产品推荐

