2

スクリプトの使用法がこのような場合、Python optparse は非常にうまく機能します

%prog [options] [args]

ただし、引数が1つの必須スクリプトのヘルプを記述する必要があるため、使用方法は次のようになります

%prog action [options] [args]

Subversion を使用すると、同様のことがわかります - その使用文字列は

svn <subcommand> [options] [args]

そこで私の質問は、optparse で必要な引数のヘルプを Subversion のように用意することは可能ですか? その結果、次のようなヘルプが表示されます。

Usage: python myscript.py action [options] [args]

Available actions:
  foo
  bar

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         Verbose mode. Output debug log to stdout.
4

3 に答える 3

7

Python 2.7 および 3.2 に含めることが提案されているargparseが良い解決策だと思います。それはあなたが望むようにサブコマンドを処理し、リンクされたページには optparse からコードを移植するページへのリンクが含まれています。

質問command-line-arguments-in-pythonも参照してください。誰かが、あなたが望むものとまったく同じものを含むように見える参照のリストを編集しました:

于 2009-12-09T19:45:39.597 に答える
2

はい。次のように使用文字列を設定できます。

usage = "%prog action [options] [args]"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose",
                  action="store_true", dest="verbose", default=True,
                  help="make lots of noise [default]")

以下を出力します。

Usage:  action [options] [args]

Options:
  -h, --help     show this help message and exit
  -v, --verbose  make lots of noise [default]

これはdocsからほぼそのままコピーされました。

編集:

コメントに基づいて、説明を使用して同様のことを実現できますが、改行文字を入れることはできません。

parser.description = 'Available actions: foo, bar'

次のようになります。

Usage:  action [options] [args]

Available actions: foo, bar

Options:
  -h, --help     show this help message and exit
  -v, --verbose  make lots of noise [default]
于 2009-12-09T19:43:05.843 に答える
0

私もこの問題に遭遇しました。私の解決策は、コマンドをリストまたはタプルで宣言し、それらをusageOptionParserのパラメーターにフォーマットしてから、パーサーによって提供されるargsリストを使用して、コマンドが提供されたかどうかを判断することargs[0]でした。例えば:

self.commands = ('foo', 'bar' ...)
self.parser = <initialized instance of OptionParser>
(self.options, self.args) = parser.parse_args()

if len(self.args) == 0:
   self.parser.error("Command required")

self.command = self.args[0]
if not self.command in self.commands:
   self.parser.error("Command not recognized")

#... etc

これにより、Subversionのようなコマンドシステムが得られますが、確かにoptparseの方が優れている可能性があります。argparseモジュールがstdlibに組み込まれることになっていると聞きましたが、2.7は2シリーズリリースの最後であるため、3.xに組み込まれるのを待つ必要があると思います。もちろん、argparseをインストールすることもできますが、それは場合によってはドラッグになります。

于 2009-12-09T20:01:59.153 に答える