仍在使用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),有谁知道怎么做?
答案 0 :(得分:1)
parse_known_args
会返回tuple
,namespace
和'额外'列表(此处为空)
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'}