2

何らかの理由で、プログラムに非標準のコマンド ライン オプションがあります。私のプログラムは、単一の '-' を含む長いオプションも受け取ります。たとえば、有効なコマンド ライン オプションは「-f」/「-foo」です。短いオプションと長いオプションの両方に、スペースまたは「=」で区切られた引数が必要です。

これを optparse を使用して解析しようとしていますが、optparse が GNU 標準以外のオプションをサポートしていないことは理解しています。これを行うために optparse を微調整する方法はありますか?

4

3 に答える 3

2

これは、必要なことを行うためのややハックな方法です。

一部のメソッドをサブクラスOption化し、パッチを適用します。OptionParser

from optparse import Option, OptionError, OptionParser

class MyOption(Option):
    def _set_opt_strings(self, opts):
        for opt in opts:
            if len(opt) < 2:
                raise OptionError(
                    "invalid option string %r: "
                    "must be at least two characters long" % opt, self)
            elif len(opt) == 2:
                self._short_opts.append(opt)
            else:
                self._long_opts.append(opt)

class MyOptionParser(OptionParser):
    def _process_args(self, largs, rargs, values):
        while rargs:
            arg = rargs[0]
            if arg == "--":
                del rargs[0]
                return
            elif arg[0:2] == "--":
                self._process_long_opt(rargs, values)
            elif arg[:1] == "-" and len(arg) > 1:
                if len(arg) > 2:
                    self._process_long_opt(rargs, values)
                else:
                    self._process_short_opts(rargs, values)
            elif self.allow_interspersed_args:
                largs.append(arg)
                del rargs[0]
            else:
                return 

今、あなたはすることができます

parser = MyOptionParser()
parser.add_option(MyOption("-f", "-file", dest="filename",
                 help="write report to FILE", metavar="FILE"))
parser.add_option(MyOption("-q", "-quiet",
                 action="store_false", dest="verbose", default=True,
                 help="don't print status messages to stdout"))

これにより、オプションとしてparser受け入れ-fileられます (eg は受け入れられません-fq)。

于 2013-04-03T23:04:24.260 に答える
1

optparseのドキュメントから

オプション:
プログラムの実行をガイドまたはカスタマイズするための追加情報を提供するために使用される引数。オプションにはさまざまな構文があります。従来の Unix 構文は、ハイフン (「-」) の後に単一の文字が続きます (例:-xまたは ) -F。また、従来の Unix 構文では、複数のオプションを 1 つの引数にマージできます。たとえば、-x -Fis と同等-xFです。導入された GNU プロジェクトの--後に、ハイフンで区切られた一連の単語が続き--fileます--dry-runこれらは、 optparse が提供する 2 つのオプション構文のみです。

(強調追加)

いいえ、で引数を処理する他の方法を指定することはできませんoptparse。ただし、sys モジュールargvからを使用して、引数を自分で解析できます。

これはより多くの作業になりますが、次のようになります。

from sys import argv
for arg in argv:
    if arg.startswith("-") or arg.startswith("--"):
        # Parse the argument
于 2013-04-03T22:22:37.640 に答える
0

微調整する方法はないと思いますがoptparse(確かなことはわかりませんが)、getoptCスタイルのコマンドラインオプションを処理する代替手段です。

于 2013-04-03T22:21:16.843 に答える