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

Python调用curl触发Jenkins时含^&的密码处理问题求助

解决方案

方法1:使用subprocess.run替代os.system(推荐)

os.system会把命令交给系统shell解析,导致&(后台执行符号)、^(转义符)这类特殊字符被错误处理。改用subprocess.run并传递参数列表,能绕过shell解析,直接把参数传给curl进程,彻底解决特殊字符问题。

修改后的代码示例:

import subprocess
import datetime
import time

def Start_Job(args):
    global job_start_date
    print("\n----------------- Run Command -----------------\n" + " ".join(args))   
    job_start_date = datetime.now()
    print("\n job_start_date = " + str(job_start_date) + "\n")
    try:
        # shell=False(默认值)直接传递参数列表,避免shell解析
        result = subprocess.run(args, check=True)
        print("\n-------- Wait for 100 seconds ---------------------") 
        time.sleep(100)
    except subprocess.CalledProcessError as e:
        print("Error in Start_Job [返回码:", e.returncode, ", 输出:", e.output, "]")
    except Exception as e:
        print("Error in Start_Job [" , str(e) , "]")

# 将curl命令拆分为参数列表,每个参数作为独立元素
args = [
    'curl', '--insecure',
    '-u', 'admin:G^H&j8k9G^H&j8k9',
    'https://expert_solution.net.plm.eds.com/job/Amar/job/WaitingTest/buildWithParameters?token=simdevops&Machine_Name=iltlvinteg6'
]

Start_Job(args)

方法2:对密码进行shell转义(兼容os.system)

如果必须保留os.system,需要对密码里的shell特殊字符做转义处理:

  • 针对bash等类Unix shell:&转义为\&,^转义为\^
  • 针对Windows cmd:&转义为^&,^转义为^^

以bash为例,修改后的command:

command = 'curl --insecure -u admin:G\^H\&j8k9G\^H\&j8k9 "https://expert_solution.net.plm.eds.com/job/Amar/job/WaitingTest/buildWithParameters?token=simdevops&Machine_Name=iltlvinteg6"'

也可以用单引号包裹整个用户名密码(shell中单引号内的字符不会被解析):

command = 'curl --insecure -u \'admin:G^H&j8k9G^H&j8k9\' "https://expert_solution.net.plm.eds.com/job/Amar/job/WaitingTest/buildWithParameters?token=simdevops&Machine_Name=iltlvinteg6"'

为什么urllib.parse.quote无效?

urllib.parse.quote是用于URL编码的工具,但-u参数里的密码是curl用于HTTP基础认证的凭据,不属于URL的一部分,所以URL编码无法解决shell解析特殊字符的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:17:20