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

如何通过sys.argv获取准确URL?终端传递时字符转义异常

解决sys.argv获取含&的URL时被截断/编码异常的问题

问题场景

我用这段Python代码通过sys.argv获取传入的URL:

import sys
url = sys.argv[1]
print(url)

执行命令时输入了带&的签名URL:

python test.py https://s3.amazonaws.com/apm_prod_00f03632faded6cf0aafb3de4895e9eb/d_20230519_174025.heic%22&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential

但终端运行后,无法拿到完整的URL,原本的&还被转成了%26,怎么解决?

解决方法

1. 用引号包裹整个URL

终端里的&是特殊字符,默认会被解析成「后台执行命令」的分隔符,直接输入会把URL拆成多个部分。把整个URL用单引号或双引号包起来,就能让shell把它当成单个参数传递:

# 用双引号包裹(注意如果URL里包含双引号解码字符%22,建议用单引号)
python test.py "https://s3.amazonaws.com/apm_prod_00f03632faded6cf0aafb3de4895e9eb/d_20230519_174025.heic%22&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential"

# 更稳妥的单引号包裹(避免URL里的双引号编码干扰)
python test.py 'https://s3.amazonaws.com/apm_prod_00f03632faded6cf0aafb3de4895e9eb/d_20230519_174025.heic%22&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential'

2. 转义每个&符号

在每个&前面加反斜杠\,告诉shell这是普通字符,不是命令分隔符:

python test.py https://s3.amazonaws.com/apm_prod_00f03632faded6cf0aafb3de4895e9eb/d_20230519_174025.heic%22\&X-Amz-Algorithm=AWS4-HMAC-SHA256\&X-Amz-Credential

原因说明

shell会自动解析命令行里的特殊字符(比如&、空格、引号等),你输入的&被shell识别为后台执行标记,导致URL被拆成了多个独立命令,只有&之前的内容会作为第一个参数传给Python,后面的X-Amz-Algorithm=...会被当成新命令执行。用引号包裹或转义后,shell会把整个URL作为单个字符串传递给sys.argv[1],就能完整获取到原始URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:33:26