You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中如何将Bash获取的Python输出变量用于curl命令?

问题:Bash调用Python脚本获取变量用于curl时异常(Jenkins环境)

核心现象

在Bash Shell中通过Python脚本输出的数字赋值给变量,将该变量嵌入curl的URL参数时,echo出的命令看似正常,但实际执行返回服务器错误;而手动把数字写入curl命令却能得到正确结果。同时在Jenkins自由风格/多配置项目中,Python脚本读取仓库内的file.json时工作正常,读取Jenkins工作区的file.json则失效。

相关脚本与输出

Bash测试脚本

POST=$(python3 /repo/post.py)
echo "${POST}"
echo "curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/${POST}/?format=json""
curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/${POST}/?format=json"

执行输出结果

30
curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/30/?format=json"
<h1>Server error</h1>
<p>An unspecified error occured.</p>

手动执行的正常curl命令

curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/30/?format=json"

Jenkins中的前置操作

Jenkins任务中先通过curl上传文件生成file.json,命令如下:

curl -H "Authorization: Bearer ExampleToken" -H "Version: {$VERSION}" -T "post.tar.gz" "https://wikipedia.org/api/upload/" >file.json

Python脚本对比

失效脚本(读取Jenkins工作区文件)

import json
import os

WORKSPACE = os.environ.get('WORKSPACE')
json_text = str()
with open(f'{WORKSPACE}/file.json', 'r') as f:
    json_text = f.read()

data = json.loads(json_text)

post = data['POST']

print (post)

正常脚本(读取仓库内文件)

import json
import os

json_text = str()
with open('repo/marta/file.json', 'r') as f:
    json_text = f.read()

data = json.loads(json_text)

post = data['POST']

print (post)

内容的提问来源于stack exchange,提问作者Marta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:55:54