Python使用argparse时如何处理值以-开头的命令行参数问题
原因说明
argparse默认会优先将所有以-开头的字符串识别为新的命令行选项。你之前加引号的操作仅能在bash层面处理空格问题,引号会在传递给Python进程前被剥离,argparse拿到的仍然是-problem这类带-前缀的内容,因此会触发参数缺失报错。
解决方法
无需调整代码(推荐)
- 使用等号绑定参数名和参数值
将空格分隔的参数名与值改为=连接,argparse会直接将等号后的全部内容识别为对应参数的取值,不会将开头的-判定为选项前缀,调用示例:
该方案改动最小,兼容性最高,完全不需要调整原有代码逻辑。python3 file.py --output_file=output.txt --pattern="-problem" --some_string="-abc" - 使用
--终止选项解析
在第一个可能出现带-前缀值的参数前添加--,告诉argparse后续所有字符串都不会被识别为选项,仅作为参数值处理,调用示例:python3 file.py --output_file output.txt -- --pattern "-problem" --some_string "-abc"
调整代码适配
如果需要保留原有空格分隔的调用格式,可以在初始化ArgumentParser时自定义选项前缀,避免和参数值的-冲突:
# 修改ArgumentParser初始化参数,指定选项前缀为+,原有参数定义无需改动 my_parser = argparse.ArgumentParser(description="Sample code for reference", prefix_chars='+')
调整后调用命令的参数前缀对应改为+即可:
python3 file.py ++output_file output.txt ++pattern "-problem" ++some_string "-abc"
内容的提问来源于stack exchange,提问作者vish4071
相关产品推荐
相关产品推荐

