Python ArgumentParser.add_参数:如何将动作参数与自定义类型参数一起使用?
当我尝试使用时,问题是:Python ArgumentParser.add_参数:如何将动作参数与自定义类型参数一起使用?,python,python-2.7,python-3.x,command-line-arguments,argparse,Python,Python 2.7,Python 3.x,Command Line Arguments,Argparse,当我尝试使用时,问题是: parser.add_argument("--blah", type=func, help="Whatever", action='store_true') …我得到这个错误: TypeError: __init__() got an unexpected keyword argument 'type' 我真正想要的是在命令行上使用此标志时运行名为func的函数(上面指定为参数类型),如下所示: python3 script.py --blah 这有可能吗?如果我
parser.add_argument("--blah", type=func, help="Whatever", action='store_true')
…我得到这个错误:
TypeError: __init__() got an unexpected keyword argument 'type'
我真正想要的是在命令行上使用此标志时运行名为func的函数(上面指定为参数类型),如下所示:
python3 script.py --blah
这有可能吗?如果我需要更详细地回答我的问题,请告诉我。您可以在解析参数后调用函数
parser.add_参数(“--blah”,help=“Whatever”,action='store\u true”)
args=parser.parse_args()
然后检查标志值并适当调用函数
if args.blah:
func()
有一种方法可以做到这一点:
from argparse import Action
class CleanUpAction(Action):
'''
@summary: Clean up the arguments
'''
def __call__(self, parser, args, values, option_string=None):
if values.startswith('\'') and values.endswith('\''):
values = values[1:-1]
setattr(args, self.dest, values)
parser.add_argument('-blah', '--blah', type=str, action=CleanUpAction, help='clean up the argument')
通过这种方式,它将在清理执行后存储。类型参数是一个函数,用于测试和/或将命令行参数转换为将存储在
args
命名空间中的内容
import argparse
def func():
pass
def main(args):
############### Parsed command line arguments to initialize variables ######################
blah = args.blah
if blah:
func()
def get_parser():
### Command line input parsing here. ###########
parser = argparse.ArgumentParser(prog='python ' + sys.argv[0], description='This program does blah!')
parser.add_argument("-blah", , help='Run func',default= False, action='store_true')
if __name__ == "__main__":
parser = get_parser()
args = parser.parse_args()
parser.parse_args('--foo', type=int) # default store action
将['--foo','123']
转换为命名空间(foo=123)
,而不是foo='123'
但是action='store\u true'
会创建一个真/假参数。它不接受标志后面的参数。所以给它一个类型
参数是没有意义的。诚然,错误信息可能更清晰,但这种错误并不经常出现。这是一个开发问题,而不是运行时问题
正如其他人指出的,您可以使用args.blah
的True/False
值在解析后有条件地运行func
您希望何时运行
func
?在解析完所有命令行之后?还是在它还在解析的时候?我更喜欢将解析与运行分开。使用argparse
了解用户需要什么;使用您自己的代码在之后执行操作。似乎action
和type
是此函数的冲突参数。@Coldspeed那么,还有什么替代方法呢?您可以这样做:parser.add_参数(--blah),help=“where”,action='store_true');args=parser.parse(“…”);if args.blah:func()
类似于@SunnyAggarwal发布的内容。if args['blah']:
——我怀疑这是一种有效的语法。你的意思是如果args=='blah'
?是的,我的坏参数可以通过使用dot的属性类型访问来访问。我不明白你说的清除参数是什么意思。你能解释一下吗?这只是一个示例函数,用于演示如何获得如此深刻的答案。至于你问的问题——我想在命令行中运行func
类似的命令:pythonscript.py——等等,也就是说,在解析完成之后。