Pythonのoptparseを使用して位置引数ヘルプをフォーマットするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/642648

質問

ドキュメントに記載されているとおり optparse.OptionParser は、 IndentedHelpFormatter を使用して、フォーマットされたオプションヘルプを出力します。 tags / 0.5.0 / apidocs / optparse.IndentedHelpFormatter-class.html "rel =" noreferrer "> APIドキュメント。

必要な位置引数について、同様の形式のヘルプテキストを使用テキストに表示したい。同様の位置引数のフォーマットに使用できるアダプターまたは単純な使用パターンはありますか?

明確化

できればstdlibのみを使用してください。 Optparseは、この1つのフォーマットの微妙な違いを除いて、非常に優れています。他のパッケージ全体をインポートせずに修正できるはずです。 :-)

役に立ちましたか?

解決

最善策は、optparseモジュールにパッチを書くことです。それまでの間、わずかに変更されたOptionParserクラスでこれを実現できます。これは完璧ではありませんが、やりたいことを実現できます。

#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter

class PosOptionParser(OptionParser):
    def format_help(self, formatter=None):
        class Positional(object):
            def __init__(self, args):
                self.option_groups = []
                self.option_list = args

        positional = Positional(self.positional)
        formatter = IndentedHelpFormatter()
        formatter.store_option_strings(positional)
        output = ['\n', formatter.format_heading("Positional Arguments")]
        formatter.indent()
        pos_help = [formatter.format_option(opt) for opt in self.positional]
        pos_help = [line.replace('--','') for line in pos_help]
        output += pos_help
        return OptionParser.format_help(self, formatter) + ''.join(output)

    def add_positional_argument(self, option):
        try:
            args = self.positional
        except AttributeError:
            args = []
        args.append(option)
        self.positional = args

    def set_out(self, out):
        self.out = out
def main():
    usage = "usage: %prog [options] bar baz"
    parser = PosOptionParser(usage)
    parser.add_option('-f', '--foo', dest='foo',
                      help='Enable foo')
    parser.add_positional_argument(Option('--bar', action='store_true',
                                   help='The bar positional argument'))
    parser.add_positional_argument(Option('--baz', action='store_true',
                                   help='The baz positional argument'))
    (options, args) = parser.parse_args()
    if len(args) != 2:
        parser.error("incorrect number of arguments")
    pass

if __name__ == '__main__':
    main()

そして、これを実行して得られる出力:

Usage: test.py [options] bar baz

  Options:
    -h, --help         show this help message and exit
    -f FOO, --foo=FOO  Enable foo

Positional Arguments:
  bar  The bar positional argument
  baz  The baz positional argument

他のヒント

argparse をご覧ください。ドキュメントには、位置引数と見栄えの良いヘルプメッセージがサポートされていると記載されています。

これに対するクリーンなソリューションに興味があります。私は1つを思い付くことができませんでした。 OptionParserはオプションに完全に焦点を合わせています。私が見つけることができる限り、それはあなたにポジション引数を扱うために何も与えません。

私がやったのは、 \ t sを使用して適切なスペースを確保するために、位置引数ごとに小さなドキュメントブロックのリストを生成することでした。次に、改行でそれらを結合し、OptionParserに渡される 'usage'文字列に追加しました。

見た目は良いのですが、ばかげているように感じます。もちろん、オプションのリストの上にドキュメントが表示されることになります。私はそれを回避する方法、または複雑なことを行う方法を見つけていません。つまり、特定のオプションのセットは、その引数にのみ適用されるため、位置引数の説明の下に説明されています。

モンキーパッチOptionParserのメソッドを見て、(これは1年ほど前だった)それほど難しくはなかったことを覚えていますが、その道をたどりたくありませんでした。

位置引数のほとんどのヘルプテキストは、* NIXボックスのマニュアルページで頻繁に使用される形式に似ています。 「cp」コマンドの文書化方法をご覧ください。ヘルプテキストはそれに似ている必要があります。

それ以外の場合は、「ヘルプ」に記入する限りパーサーの使用中に引数を指定すると、ドキュメント自体が生成されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top