25

ドキュメントに記載されているように、optparse.OptionParserを使用しIndentedHelpFormatterて書式設定されたオプションのヘルプを出力します。これについては、いくつかのAPI ドキュメントを見つけました。

使用法テキストの必須の位置引数について、同様の形式のヘルプ テキストを表示したいと考えています。同様の位置引数の書式設定に使用できるアダプターまたは単純な使用パターンはありますか?

明確化

できればstdlibのみを使用してください。Optparse は、この 1 つの書式設定のニュアンスを除いてはうまく機能します。これは、他のパッケージ全体をインポートしなくても修正できるはずだと思います。:-)

4

4 に答える 4

19

最善の策は、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
于 2009-03-20T00:57:55.767 に答える
8

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

于 2009-03-13T17:34:22.503 に答える
1

これに対するクリーンな解決策に興味があります。思いつきませんでした。OptionParser は、実際には完全にオプションに焦点を当てています。私が見つけた限り、位置引数を操作するものは何もありません。

私が行ったことは、\ts を使用して適切な間隔を取得し、位置引数ごとに小さなドキュメント ブロックのリストを生成することでした。次に、それらを改行で結合し、それを OptionParser に渡される「usage」文字列に追加しました。

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

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

于 2009-03-13T13:46:09.213 に答える
0

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

それ以外の場合は、パーサーの使用中に「ヘルプ」引数を入力する限り、ドキュメントは自動的に作成されます。

于 2009-03-13T13:32:27.653 に答える