gpt4 book ai didi

python - argparse - 为什么代码在没有被调用的情况下被执行?

转载 作者:行者123 更新时间:2023-11-28 20:27:26 28 4
gpt4 key购买 nike

我在理解 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,具有三个主要方法,makecleancompile 和其他私有(private)方法,_iterator__init__

更新 完整脚本在这里:http://dpaste.com/hold/681317/

运行此文件时我缺少什么?

最佳答案

那是因为你自己调用了 make,在这里:

parser_make.set_defaults(func=lang.make())

特别是这部分:

lang.make()

因此,func arg 被设置为 make 的返回值。

相反,您可能希望将方法作为参数传递,而不调用它:

parser_make.set_defaults(func=lang.make)

更新

请注意,argparse 不会为您调用这些方法。它将在解析器返回的 args 对象的 func 属性中返回它们。

所以在你解析完参数后,你必须自己调用它:

args = parser.parse_args()
args.func()

这里的args.func将是方法对象之一(lang.make, lang.compilelang.clean 取决于哪个命令被指定为脚本参数)。对其应用调用运算符 () 将执行它。

关于python - argparse - 为什么代码在没有被调用的情况下被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724262/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com