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

如何让Python的argparse正常接收包含$字符的字符串参数

问题根因

这个参数截断和argparse无关,是macOS默认的shell(zsh/bash)的变量展开机制导致的:
当你用双引号包裹带$的参数时,shell会先把$开头的内容识别为变量进行替换,如果对应变量没有赋值就会被替换为空,所以"file$102_a.txt"在传入Python脚本前就已经被shell处理成了file,argparse接收到的本身就是截断后的内容。argparse本身对入参字符串的字符没有特殊限制,只要shell能把完整内容传入,就能正常解析。

解决方法
  • 优先推荐:用单引号包裹参数
    单引号在shell中会禁用所有特殊字符转义和变量展开,内容会原封不动传给程序,运行示例:
    python your_script.py 'file$102_a.txt'
    argparse即可拿到完整的带$的字符串。
  • 备选方案:对$加转义符
    如果必须用双引号,可以在每个$前加反斜杠\转义,告知shell不要做变量展开,运行示例:
    python your_script.py "file\$102_a.txt"
    也能拿到完整内容。
验证示例

你可以用以下极简脚本测试效果:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file_name", type=str)
args = parser.parse_args()
print(args.file_name)

用上述两种方法传参,就能正常输出完整的file$102_a.txt。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:39:03