3

如何字符串格式 OptionParser() 帮助消息?似乎忽略了换行符?请看下面的代码。

parser = OptionParser()
parser.add_option("--s", dest="s", type="string", help="first line \n second line")

意图:

current output:
.... first line \n second line

expected output:
.... first line 
     second line
4

2 回答 2

1

我可以建议argparse吗?

我不确定 OptionParser 是否支持这一点,但我建议使用三引号,
即:

parser = OptionParser()
parser.add_option('--s',
                  dest='s'
                  type='string'
                  help='''
With triple quotes I can directly put in anything including line spaces.
\n will appear as a string rather than a newline.''')

参数解析示例:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--s',
                  help='''first line
second line''')
args = parser.parse_args()
print args.s
于 2014-06-19T20:24:26.140 回答
1

Lib/optparse.py文件。

class HelpFormatter
    def format_option
    ...
    if option.help:
        help_text = self.expand_default(option)
        help_lines = textwrap.wrap(help_text, self.help_width)
        result.append("%*s%s\n" % (indent_first, "", help_lines[0]))
        result.extend(["%*s%s\n" % (self.help_position, "", line)
                       for line in help_lines[1:]])

换句话说,您的help字符串是通过textwrap.wrap. 对该函数的快速测试表明它删除了嵌入\n的,并在它认为合适的时候分割了行。

与 一样argparse,您可以通过子类化HelpFormatter和重写所选方法(例如此方法)来自定义帮助。例如,您可能会通过将该textwrap调用替换为help_lines = help_text.splitlines(). 您松开了自动包装,但可以控制帮助的外观。

OptionParser接受一个formatter参数。 IndentedHelpFormatter是自定义格式化程序类的示例。

,类就做了这样的改变,用 . 替换argparse了调用。RawTextHelpFormatterwrapsplitlines()

于 2014-06-24T01:51:24.667 回答