3

すでにどこかで回答されている場合は、事前にお詫び申し上げます。私は最後の1時間からPythonサイトにアクセスしています。しかし、どうすればこれができるのかよくわかりませんでした。私のスクリプトは次のようなオプションを取る必要があります:

myScript.py -f <file-name> -e [/ -d]
myScript.py -s <string> -e [/ -d]
myScript.py -f <file-name> [/ -s <string>] -e -w [<file_name>]

つまり、 -f/ -s-e/-dは必須のオプションですが、-f&を一緒に使用することはできません。また、 &オプション-sと同じように-を一緒に使用することはできません。チェックを入れるにはどうすればよいですか?-e-d

同時に質問する可能性がある場合の別の質問:-wオプション(使用する場合)を値付きまたは値なしで使用するにはどうすればよいですか?値が指定されていない場合は、デフォルト値を使用する必要があります。それ以外の場合は、指定された値を使用します。どんな助けでも大歓迎です。乾杯!!

4

2 に答える 2

2

optparse を使ってからしばらく時間が経ちましたが、ドキュメントと古いプログラムを簡単に調べてみました。

" -f/-s、-e/-d は必須オプションですが、-f&-s は一緒に使用できません。また、-e&-d オプションと同じように - 一緒に使用することもできません。チェックを入れるにはどうすればよいですか? "

相互排他性については、次のように自分で確認する必要があります。

parser.add_option("-e", help="e desc", dest="e_opt", action="store_true")
parser.add_option("-d", help="d desc", dest="d_opt", action="store_true")
(opts, args) = parser.parse_args()
if (parser.has_option("-e") and parser.has_option("-d")):
    print "Error!  Found both d and e options.  You can't do that!"
    sys.exit(1)

ここのオプションの例はブール値であるため、上記の if 行を次のように置き換えることができます。

if (opts.e_opt and opts.d_opt):

詳細については、 「optparse がエラーを処理する方法」セクションを参照してください。

" -w オプション (使用する場合) を oa 値と一緒に、または値なしで使用するにはどうすればよいですか? "

私は、値がオプションである optparse オプションを使用する方法を考え出したことがありません。私の知る限り、オプションを設定して値を設定するか、値を設定しないようにする必要があります。最も近いのは、値が必要なオプションのデフォルト値を指定することです。その場合、そのエントリをコマンド ラインで指定する必要はありません。サンプルコード:

parser.add_option("-w", help="warning", dest="warn", default=0)

(うまくいけば役立つ)提案とは別に:

ドキュメントを見た場合、「必須オプション」が矛盾した表現であるという部分を見たことがありますよね? ;-p ユーモアはさておき、次のようにインターフェイスを再設計することを検討することをお勧めします。

  • 「オプション」を使用して必要な情報が入力されていません。
  • 1 つの引数 (または引数のグループ) のみが、相互に排他的なデータを入力します。つまり、"-e" または "-d" の代わりに、"-e on" または "-e off" を使用します。「-v」で詳細表示、「-q」で非表示/詳細表示オフのようなものが必要な場合は、値を 1 つの変数に格納できます。
parser.add_option("-v", help="verbose on", dest="verbose", action="store_true")
parser.add_option("-q", help="verbose off", dest="verbose", action="store_false")

この特定の例は、セクションブール値 (フラグ) オプションの処理から借用されています (わずかに拡張されています) 。このようなものについては、グループ化オプションのセクションもチェックしてください。私はこの機能を使用したことがないので、これ以上は説明しません。

于 2011-07-12T21:22:36.560 に答える
2

argparse2.7 以降を使用している場合は、 試してみてください。このセクションは、あなたが望むものでなければなりません。

概要:

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_false')

相互に排他的--fooです。s の使用に関する--bar詳細については、詳細な使用方法を参照してください。argparseArgumentParser

これoptparseは非推奨であるため、argparseとにかく使用することをお勧めします。

于 2011-07-12T19:52:47.780 に答える