使用argparse时,将--help传递给程序会生成帮助文本。不幸的是,由于选项之间没有空白行,因此很难阅读。这是摘录来说明:

optional arguments:
  -h, --help            show this help message and exit
  -u FILENAME, --up-sound FILENAME
                        The sound to play when the network comes up. Default:
                        "/path/to/some/sound/file.wav"
  -d FILENAME, --down-sound FILENAME
                        The sound to play when the network goes down. Default:
                        "/path/to/some/other/sound/file.wav"
  -p EXECUTABLE, --player EXECUTABLE
                        The program to use to play sounds. Default: "play"
  -s, --silent          If specified, network_monitor.py will not play any
                        sounds.
  -c, --no-clear-screen
                        If specified, screen will not be cleared (nor extra
                        blank lines added) before network_monitor.py runs.
  --version             show program's version number and exit

请注意,在某些情况下,例如-p-s之间或-c--version之间,很难一目了然地知道哪个帮助文本适用于哪个选项。条目之间应该有一个空白行。例如:
  -p EXECUTABLE, --player EXECUTABLE
                        The program to use to play sounds. Default: "play"

  -s, --silent          If specified, network_monitor.py will not play any
                        sounds.

我该怎么做? Several other问题建议使用argparse.RawTextHelpFormatter。这样做的问题是,如果我使用它,我必须编写自己的逻辑来包装帮助文本,因为原始文本帮助格式化程序不会进行格式化。显而易见的答案是将'\n\n'附加到帮助文本的末尾,并使用默认的格式化程序。但莫名其妙的是,换行符被剥夺了。

这里的前进方向是什么?我正在使用Python 3.4。

最佳答案

您可以创建自己的帮助文本格式化程序来执行此操作。请注意,这要求您非常具体地了解argparse.HelpFormatter的实现细节。因此,请考虑每个帮助格式化程序类型描述中包含的以下警告:



一旦我们忽略了这一点,创建自己的帮助格式化程序就可以在条目之间添加空白行,这非常简单:

class BlankLinesHelpFormatter (argparse.HelpFormatter):
    def _split_lines(self, text, width):
        return super()._split_lines(text, width) + ['']

就是这样。现在,当您在将ArgumentParser传递给构造函数的同时创建 formatter_class=BlankLinesHelpFormatter 对象时,帮助文本中每个参数之间将出现空白行。

关于Python argparse : Insert blank line between help entries,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29484443/

10-12 23:04