如何使用字符串格式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
答案 0 :(得分: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.''')
argparse示例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--s',
help='''first line
second line''')
args = parser.parse_args()
print args.s
答案 1 :(得分: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
,RawTextHelpFormatter
类只进行了此类更改,将wrap
调用替换为splitlines()
。