ArgumentParser与ArgumentDefaultsHelpFormatter结合使用的epilog和描述格式

Spy*_*cho 28 python argparse

我正在使用argparse接受命令行输入并生成帮助文本.我想用ArgumentDefaultsHelpFormatterformatter_class,但是这防止我也用 RawDescriptionHelpFormatter这将让我的自定义格式添加到我的描述或收尾.

除了自己编写代码以生成默认值的文本之外,还有一种明智的方法可以实现这一目的吗?根据argparse文档,所有内部ArgumentParser都被认为是实现细节,而不是公共API,因此子类化不是一个有吸引力的选择.

Spy*_*cho 38

我只是尝试了一种多继承方法,它的工作原理如下:

class CustomFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter):
    pass

parser = argparse.ArgumentParser(description='test\ntest\ntest.',
                                 epilog='test\ntest\ntest.',
                                 formatter_class=CustomFormatter)
Run Code Online (Sandbox Code Playgroud)

如果这些类的内部改变,这可能会破坏.

  • 再三考虑,argparse的作者在[this issue(2011)](http://bugs.python.org/issue13023)中提到了这是推荐的解决方案。我想这将使此方法非正式地支持以后的版本。 (2认同)