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——等等,也就是说,在解析完成之后。