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.''')

argparse の例:

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ます。その関数を簡単にテストすると、 embedded が削除され\n、適切と思われる行が分割されることがわかります。

と同様に、 をサブクラス化し、このような選択したメソッドを書き換えることでargparse、ヘルプをカスタマイズできます。たとえば、その呼び出しをHelpFormatterに置き換えることで、欲しいものを手に入れることができます。自動ラッピングは失われますが、ヘルプの外観を制御できます。textwraphelp_lines = help_text.splitlines()

OptionParserパラメータを取りformatterます。 IndentedHelpFormatterカスタマイズされたフォーマッタ クラスの例です。

,クラスはまさにそのような変更を行い、argparse呼び出しを.RawTextHelpFormatterwrapsplitlines()

于 2014-06-24T01:51:24.667 に答える