Python的argparse如何将位置参数后所有参数均视为位置参数?
解决方案
这个需求可以直接实现,使用argparse内置的REMAINDER常量作为脚本参数的nargs取值即可,无需用户手动输入--分隔。
实现代码
import argparse parser = argparse.ArgumentParser() # 定义runner自身的所有可选参数 parser.add_argument("--times", type=int, default=1, help="脚本运行次数") # 定义位置参数:待运行的脚本路径 parser.add_argument("script", help="The script to run") # 剩余所有参数全部归为脚本参数,无论是否符合runner可选参数格式 parser.add_argument("script_args", nargs=argparse.REMAINDER, help="Script arguments") args = parser.parse_args()
效果验证
执行命令
runner --times 3 script.py arg1 arg2
解析结果:args.times = 3,args.script = "script.py",args.script_args = ["arg1", "arg2"]
符合预期:脚本运行3次,传入arg1、arg2两个参数。执行命令
runner script.py arg1 arg2 --times 3
解析结果:args.times = 1(默认值),args.script = "script.py",args.script_args = ["arg1", "arg2", "--times", "3"]
符合预期:脚本运行1次,传入全部4个参数。
特殊场景说明
如果存在脚本文件名本身以-开头的极特殊场景,仍然需要用户手动添加--分隔runner参数和脚本路径,比如runner --times 2 -- --custom-script.py arg1,避免argparse将带-的文件名识别为runner的可选参数。
内容的提问来源于stack exchange,提问作者Christopher Shroba
相关产品推荐
相关产品推荐

