当我尝试做关于使用的问题时:
parser.add_argument("--blah", type=func, help="Whatever", action='store_true')
...我收到此错误:
TypeError: __init__() got an unexpected keyword argument 'type'
我真正想要的是在命令行上使用这个标志时运行一个名为func的函数(在上面指定为参数类型):
python3 script.py --blah
这有可能吗?如果我需要更详细地提出我的问题,请告诉我。
答案 0 :(得分:1)
type
参数是一个函数,用于测试和/或将命令行参数转换为将存储在args
命名空间中的内容。
parser.parse_args('--foo', type=int) # default store action
会将['--foo','123']
转换为Namespace(foo=123)
,而不是foo='123'
。
但是action='store_true'
会创建一个True / False参数。在旗帜之后不进行争论。因此给它一个type
参数毫无意义。不可否认,错误信息可能更清楚,但这种错误通常不会出现。这是一个开发问题,而不是运行时问题。
正如其他人所指出的,您可以使用True/False
args.blah
值来解析后有条件地运行func
。
您希望何时运行func
?在解析完所有命令行之后?或者它还在解析?我更喜欢将解析与运行分开。使用argparse
来确定用户想要的内容;使用自己的代码来执行操作。
答案 1 :(得分:0)
您可以在解析参数后调用您的函数
parser.add_argument("--blah", help="Whatever", action='store_true')
args = parser.parse_args()
然后检查标志值并适当调用函数
if args.blah:
func()
答案 2 :(得分:0)
这是一种方法:
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')
这种方式在清理执行后存储
答案 3 :(得分:0)
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()