Python argparse 将 1 个或多个参数设置为参数

Python argparse set 1 or more parameters to an argument

所以基本上我确实坐在我的代码上使用 argparse 框架,但我确实有一个问题,我不知道如何实现。

基本上我有多个函数,我将它们保存到一个字典中,所以我可以通过按键调用它,并且那些函数有多个参数(还有更多参数)

所以所有东西的输入都在我注释掉的代码的最后一行,应该 运行 像这样:

结果应该是 Key() 的名称和解析为参数的值(VALUE1,VALUE2......)

#filename: testfiler.py
import argparse

def filterOne(par1):
    print(par1)

def filterTwo(par1,par2):
    print(par1,par2)

def filterThree(par1,par2,par3):
    print(par1,par2,par3)

#.... more functions to come

filters = {
    "filterOneKey": filterOne,
    "filterTwoKey": filterTwo,
    "filterThreeKey": filterThree
}

parser = argparse.ArgumentParser()
parser.add_argument('--filter', choices= (list(filters.keys()))) 
parser.add_argument('--filteragrument',metavar='Value',nargs='+') #not sure if it is correct

args = parser.parse_args()
filter = args.filter(args.filteragrument) #not sure if it is correct

print(filter) #show key() ✔️, but need to show the parameter which are parsed into filterargument (Value1,Value2....) 


#should RUN like this:
#python Tool/testfilter.py --filter filterTwoKey --filterargument Value1=23,Value2=55

您需要做的就是通过 filter 参数获取函数,并使用 filter_arguments 调用它(请注意,我修正了一个拼写错误,更改了参数名称以遵循约定并删除了metavar 因为你真的不需要它)

parser = argparse.ArgumentParser()
parser.add_argument('--filter', choices=list(filters.keys()))
parser.add_argument('--filter-arguments', nargs='+')

args = parser.parse_args()
filters[args.filter](*args.filter_arguments)

然后就可以执行了

$ python test.py --filter filterOneKey --filter-arguments a
a

$ python test.py --filter filterTwoKey --filter-arguments a b
a b

$ python test.py --filter filterThreeKey --filter-arguments a b c
a b c

当然你应该使用防御性编程来解决脚本使用不在字典中的函数名称执行的情况(使用try-except.get)或情况其中提供的参数数量与提供的函数名称不匹配(try-except*args)。