Osc*_*lal 2 python arguments class argparse
我在理解python argparse如何工作方面遇到了一些麻烦.
我的脚本有三个不带参数的位置参数:make,compile和clean.我已经通过像文档说的那样通过subparser完成了它,但是我的代码在没有参数的情况下继续运行,甚至没有参数,它也没有调用正确的函数(它在每种情况下运行Language().make()).
我的argparse代码:
lang = Language()
parser = argparse.ArgumentParser(description='e-cidadania language catalog generator.')
subparser = parser.add_subparsers()
parser_make = subparser.add_parser('make', help='Create all the language' \
' catalogs for translation,'\
' including JavaScript.')
parser_make.set_defaults(func=lang.make())
parser_compile = subparser.add_parser('compile', help='Compile all the language' \
' catalogs for use.')
parser_compile.set_defaults(func=lang.compile())
parser_clean = subparser.add_parser('clean', help='Delete all the language catalogs.' \
' After this you will'\
' have to rebuild the catalogs' \
' and translate them.')
parser_clean.set_defaults(func=lang.clean())
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
第一行调用文件中的唯一一类,称为Language有三种主要方法,make,clean并且compile和其他私有方法,_iterator和__init__.
更新完整的脚本在这里:http://dpaste.com/hold/681317/
我在文档中缺少什么来运行它?
那是因为你在打电话给make自己,在这里:
parser_make.set_defaults(func=lang.make())
Run Code Online (Sandbox Code Playgroud)
特别是,这部分:
lang.make()
Run Code Online (Sandbox Code Playgroud)
结果,funcarg被设置为返回值make.
相反,您可能希望将该方法作为参数传递,而不调用它:
parser_make.set_defaults(func=lang.make)
Run Code Online (Sandbox Code Playgroud)
更新
请注意,argparse不会为您调用方法.它将在解析器返回func的args对象的属性中返回它们.
因此,在解析args后,您必须自己调用它:
args = parser.parse_args()
args.func()
Run Code Online (Sandbox Code Playgroud)
这里args.func将是该方法的一个对象(lang.make,lang.compile或lang.clean取决于其中命令被指定为脚本参数上).将调用运算符()应用于它将执行它.