添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

0 人关注

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

基本上,我有多个函数,我把它们保存在一个dict中,所以我可以通过键来调用它,这些函数有多个参数(还有更多的参数)。

因此,所有东西的输入都在代码的最后一行,我把它注释出来,因为它应该像这样RUN。

结果应该是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
    
python
function
dictionary
parameters
argparse
Tayyeb Hussain
Tayyeb Hussain
发布于 2021-03-03
1 个回答
DeepSpace
DeepSpace
发布于 2021-03-03
已采纳
0 人赞同

你需要做的就是通过 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
$ python test.py --filter filterTwoKey --filter-arguments a b