大家好,我遇到了一个问题,所以基本上,我正在使用Argparse,并且希望多次使用相同的参数
--filter
从dict列表过滤器中获取一个参数,--parameters
从--filter
传递所选方法的参数
即:
python filename.py --filter filtermax \
--parameter hello 2 \
--filter filterPlus \
--parameter 6 "hello 9 \
--filter printer \
--parameter Bye
filters = {
"filtermax": filtermax, #(2 parameters String,Int)
"filtermin": filtermin, #(2 parameters String,Int)
"filterPlus": filterPlus, #(3 parameters Int,String,Int)
"printer": printer, #(1 parameter String)
"printer2": printer2 #(1 Parameter String)
}
parser = argparse.ArgumentParser()
parser.add_argument('--filter',choices=list(filters.keys()))
parser.add_argument('--parameter',nargs='+')
args = parser.parse_args()
filt = args.filter
para = args.parameter
data = filters[filt](*para)
如果我正确理解了你的问题,你要找的是
add_arguments()
的action='append'
根据documentation:
在您的例子中,这将创建
filter
的参数列表和parameter
的列表(将此参数重命名为parameters
是有意义的)您必须稍微调整代码,并添加一个检查,以查看传入的参数数量是否匹配
注:
在命令行调用中,似乎有一个不匹配的单双引号,即
"hello
。要使其工作(在bash中),您需要将其删除或匹配,即hello
或"hello"
在生产类型环境中,我将添加几个其他检查,例如检查} argument ,如果缺少某些内容,则正常退出
parameter
和filter
是否都已指定,或者使用add_argument()
中的^{即使} parameter ,您的案例可能太具体了,无法使用它。使用上面的解决方案}将包含作为
add_argument()
有一个^{filters
{str
的list
传递给parameter
的参数。如果要对传入的参数强制执行特定类型,例如从
parse_args()
获取参数后,需要进行额外的检查相关问题 更多 >
编程相关推荐