Python Argparse显示来自instancemethod的解析器

时间:2014-08-06 17:11:54

标签: python argparse

仍在使用Python,所以如果这个评论看起来有些过于少年,我会道歉但是我仍然有问题解决这个问题:

我有一个subparser'foo'和一个解析器'test',我将在下面包含一个缩写的代码片段:

  

my_parser = test_subparsers.add_parser('foo')

     

my_parser.set_defaults(func = myfunction,which ='Foo')

当我打印输出时:

  

parser.parse_known_args()

我得到的东西看起来像这样:

  

(Namespace(config ='config_file_path',func ='function myfunction at 0x123456>',which ='Foo')[])

parser.parse_known_args()的类型被确定为'instancemethod'。

当我尝试将字符串转换为字典对象(使用'vars')时,我得到一个空字典,我并不感到惊讶,感谢你在堆栈溢出时提供信息的人!

我正在尝试检索“哪个”项目(Foo),有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

parse_known_args会返回tuplenamespace和'额外'列表(此处为空)

In [10]: parser.parse_known_args(['foo'])
Out[10]: (Namespace(func=<function myfunction at 0x9da864c>, which='Foo'), [])

因此,添加[0]以访问命名空间

In [11]: parser.parse_known_args(['foo'])[0]
Out[11]: Namespace(func=<function myfunction at 0x9da864c>, which='Foo')

访问命名空间属性的常用方法

In [12]: parser.parse_known_args(['foo'])[0].func
Out[12]: <function __main__.myfunction>

In [13]: parser.parse_known_args(['foo'])[0].which
Out[13]: 'Foo'

作为字典:

In [14]: vars(parser.parse_known_args(['foo'])[0])
Out[14]: {'func': <function __main__.myfunction>, 'which': 'Foo'}