2

我正在尝试为具有大量可选参数(经常扩展/更改)的大型程序生成一些外部文档。我很好奇是否有一种方法可以访问parser对象的参数,以便我可以看到传递给它的所有内容的所有名称、描述、帮助等。该parse_args()函数删除所有附加信息,只返回键/值对。

例如,如果我有以下代码:

import argparse

def main():
    parser = argparse.ArgumentParser(description='Description of your program')
    parser.add_argument('-f','--foo', help='Foo help string')
    parser.add_argument('-b','--bar', help='Bar help string')
    parser.add_argument('-z','--zar', help='Zar help string')
    args = parser.parse_args()

有没有办法获取解析器中所有参数的列表?类似的东西

[{'dest':'--f', 'help':'Foo help string'}, {'dest':'-b', 'help':etc...)]

如果我能得到类似的东西,它会让标记一些漂亮的 html 文档变得轻而易举。

4

1 回答 1

2

在内部,这些ArgumentParser存储在_actions属性中:

In [21]: parser._actions
Out[21]: 
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
 _StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help='Foo help string', metavar=None),
 _StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help='Bar help string', metavar=None),
 _StoreAction(option_strings=['-z', '--zar'], dest='zar', nargs=None, const=None, default=None, type=None, choices=None, help='Zar help string', metavar=None)]

您还可以使用它们的命令行选项作为_option_string_actions属性中的键找到它们:

In [14]: parser._option_string_actions
Out[14]: 
{'--bar': _StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help='Bar help string', metavar=None),
 '--foo': _StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help='Foo help string', metavar=None),
 '--help': _HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
 '--zar': _StoreAction(option_strings=['-z', '--zar'], dest='zar', nargs=None, const=None, default=None, type=None, choices=None, help='Zar help string', metavar=None),
 '-b': _StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help='Bar help string', metavar=None),
 '-f': _StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help='Foo help string', metavar=None),
 '-h': _HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
 '-z': _StoreAction(option_strings=['-z', '--zar'], dest='zar', nargs=None, const=None, default=None, type=None, choices=None, help='Zar help string', metavar=None)}
于 2013-09-20T15:50:57.207 回答