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

Python命令行无法识别含'-'的参数,该如何解决?

如何传递含'-'的内容作为argparse命令行参数?

问题场景

我编写了以下Python代码,使用argparse接收多个命令行参数:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--cmd_list", nargs="+")
args = parser.parse_args()
cmd_list = args.cmd_list
print(cmd_list)

传递带$的参数时,用引号包裹即可正常运行,例如:

python3 myfile.py --cmd_list 'sh' '$L'

但传递以-开头的参数(如-L)时,即使加了引号,执行以下命令仍会报错:

python3 myfile.py --cmd_list 'sh' '-L'

错误信息:

error: unrecognised arguments: -L

解决方法

方法1:使用--分隔符(推荐)

这是POSIX命令行的标准用法,--会告知argparse,其后方的所有内容都视为普通参数,不再解析为命令行选项。修改命令为:

python3 myfile.py --cmd_list 'sh' -- '-L'

如果需要将所有--cmd_list的参数都放在--之后,也可以这样写:

python3 myfile.py -- --cmd_list 'sh' '-L'

方法2:修改argparse解析逻辑

可以改用parse_known_args()方法,它会将无法识别的参数(包括以-开头的内容)收集起来,手动将这些参数合并到目标列表中即可。修改后的代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--cmd_list", nargs="+")
args, unknown = parser.parse_known_args()
# 将未知参数合并到cmd_list
if unknown:
    args.cmd_list = args.cmd_list + unknown if args.cmd_list else unknown
print(args.cmd_list)

执行原命令即可正常接收-L:

python3 myfile.py --cmd_list 'sh' '-L'

方法3:shell转义(不推荐)

在-前添加反斜杠进行转义,让shell将其视为普通字符:

python3 myfile.py --cmd_list 'sh' '\-L'

这种方法依赖具体shell的转义规则,通用性较差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:22