我有一個使用argparse的應用程序,它被最新版本的Python所破壞。我不能再改變子命令的默認值。針對超出Python 2.7.6的子分析器的Argparse set_defaults?
我的應用程序有各種模塊和可選的GUI。 GUI通過子命令調用模塊,並且有一個可以改變參數默認值的ini文件。
GUI已創建解析器和子解析器,傳遞由GUI用戶設置的參數。 ini文件中的選項可能會覆蓋子分析器中的默認值。
這項工作在2.7.6中,但由於argparse的明顯變化而被更高版本打破。
import argparse
# create the top-level parser
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo', action='store_true', dest='_foo')
subparsers = parser.add_subparsers(help='sub-command help')
# create the parser for the "a" command
parser_a = subparsers.add_parser('a', help='a help')
parser_a.add_argument('--bar', type=int, default=0, dest='_bar')
#use ini file to alter default
d_ini = {'_bar': '1'}
parser.set_defaults(**d_ini)
# parse some argument lists
print parser.parse_args(['a'])
在蟒2.7.6此打印爲預期:
命名空間(_bar = 1,_foo =假)
但在以後的版本中,例如。 2.7.10它打印
命名空間(_bar = 0,_foo = FALSE)
我使用argparse不正確的,因爲如果這是一個Python的錯誤已經持續了幾現在發佈?
我是否需要在添加子分析器默認值之前處理ini文件?這比我現在的方法更麻煩,因爲它需要分別爲每個論點完成,而且還有很多。 ArgumentParser.set_defaults的python文檔明確指出:「解析器級別的默認值在使用多個解析器時可能特別有用」,所以如果這個設施已經被攻破,這是令人驚訝的。
謝謝。值得注意的是,在改變與主命令共享參數的子命令的缺省方面,似乎存在一個懸而未決的問題,[link](http://bugs.python.org/issue9351) – BarryM