3

私の質問は、基本的にこの質問のフォローアップです。placこれは、各機能を表すサブコマンドを含むコマンドライン インターフェイスを自動的に生成するために使用できる方法を示しています。

placすべてのサブコマンドに共通で、「グローバル」オプションと見なすことができるオプションについて説明することは可能ですか? 実際、これらのオプションは、サブコマンドがなくても意味を持つはずです。

svn checkout例として、 andsvn updateサブコマンドがあるかもしれませんが、 svn -vorsvn --versionコマンドも必要です。

4

2 に答える 2

1

数年前、私は を使用してマルチプロセッシング スクリプトをセットアップしましたplac。引数のセットが重複する複数のコマンドがありました。私がしたことを抽象化しようとします

class Interface(object):
    commands = ['fn1','fn2',...]
    dict1 = dict(quiet=(...), dryrun=(...), ...)
    dict2 = dict()
    dict3 = dict()

    dict1.update(dict2)
    @plac.annotations(**dict1)
    def fn1(self, dryrun, quiet, ...)
        ...
    @plac.annotations(foo=(...), **dict2)
    def fn2(self, foo, ...)
        ...
    @plac.annotations(**dict2)
    def fn3(self, ...)
        ...

そのため、各関数の引数は完全に綴る必要がありましたが、注釈はさまざまな辞書を組み合わせて照合することで構築できました。

于 2013-08-17T06:57:13.183 に答える
0

私は に慣れていplacないので、まず基本的なargparse使い方から説明します。

p = argparse.ArgumentParser(version='1.2.3')
sp = p.add_subparser()
sp.add_parser('checkout')
sp.add_parser('update')

p.parse_args(['-v'])戻り1.2.3、終了します。しかし、特別な引数の-vようなものです。-h

p.parse_args([])ただし、too few argumentsエラーが発生します。つまり、サブコマンドが必要です。その「グローバル オプション」が-d.

いくつかの資格:

  • 新しいバージョンは、別の方法で「バージョン」引数を指定します。

  • では3.3、サブコマンドは不要になりました。これは、required-arguments エラー メッセージの変更によるものであり、将来の変更では正しくない可能性があります。

パーサーが によって生成された場合、これらの制限は引き続き適用されるplacと思いますが、確認するためにplacコードを確認する必要があります。

于 2013-08-17T05:08:51.323 に答える