我在理解python argparse如何工作方面遇到了一些麻烦。
我的脚本有三个不带参数的位置参数:make,compile和clean。我已经通过像文档所说的子分析器来完成它,但是我的代码在没有参数的情况下继续运行,甚至不使用参数也不会调用正确的函数(它在每种情况下都运行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()
第一行调用文件中唯一一个名为Language
的类,其中包含三个主要方法make
,clean
和compile
以及其他私有方法{{1 }和_iterator
。
更新完整的脚本位于:http://dpaste.com/hold/681317/
我在文档中缺少什么来运行它?
答案 0 :(得分:8)
那是因为你自己打电话给make
,在这里:
parser_make.set_defaults(func=lang.make())
特别是,这一部分:
lang.make()
因此,func
arg设置为make
的返回值。
相反,您可能希望将该方法作为参数传递,而不调用它:
parser_make.set_defaults(func=lang.make)
<强>更新强>
请注意,argparse
不会为您调用这些方法。它将在解析器返回的func
对象的args
属性中返回它们。
所以在你解析args之后,你必须自己调用它:
args = parser.parse_args()
args.func()
此处args.func
将是方法对象之一(lang.make
,lang.compile
或lang.clean
,具体取决于指定哪个命令作为脚本参数)。将调用运算符()
应用于它将执行它。