2017-01-30 7 views
0

私は受け取る引数に応じて複数の使用法を持つスクリプトを持っています。たとえばのように呼び出された場合:条件付きオプション引数のargparse

script.py 

それがその主な機能を実行します。しかし、私はまた、他の の機能を実行できるようにしたい:

script.py -a 

は対話モードに入ります。

script.py -r -f filename.txt 

シェルフを再起動するファイルを使用する必要があります。

script.py -e -f filename.txt 

ファイルを使用して棚を延長する必要があります。

私の問題は、-rまたは-e フラグが存在しない限り、-fフラグをオプションにしたいということです。

私の現在のコード:-fフラグはにどのように適合するか今

parser = argparse.ArgumentParser() 
group = parser.add_mutually_exclusive_group() 
group.add_argument("-a", action="store_true") 
group.add_argument("-r", action="store_true") 
group.add_argument("-e", action="store_true") 

が、私は知らない私は、Python 3.5を使用しています。

+0

今、私は本当に-fフラグが必要ないと分かります。ブール値フラグの代わりにファイル引数を格納する-rフラグと-eフラグを作成できます。しかし、フラグが必要なのは、別のフラグが必要な場合にのみ必要となる方法があるかどうかを知りたい場合です。 – user24312

答えて

1

あなたは

parser.add_argument('-f','--file',help='filename') 

を追加する場合は、-f filenameコマンドは常に受け入れられ、例えば、として名前空間に存在することになります

Namespace(file='filename', a=False, r=True, e=False) 

省略すると、file=Noneが表示されます。

1つのオプションは、指定して必要なときに追加した情報だけを使用し、必要がない場合は無視します。また、有用なdefaultの値を与えることもできます(ユーザーがあなたに名前を与えない場合)。

別の可能性が-r

としてgroup.add_argument定義することです( ' - R'、ヘルプ= 'Rモードのファイル名')

を代わりにargs.rはTrue/Falseのあることの後、それは `Noneになります/'ファイル名'。

filenameがオプションであることが具体的な意味を持つ必要があります。それがいつオプションか、必須か禁止されます。

subparsersルートに移動して、rと 'e'サブパーザーには-f引数を定義できますが、 'a'サブパーザーは定義できません。

使用方法やヘルプの外観にも注意してください。正しい使い方についてユーザーに指示する方法について考えてみましょう。あまりにも複雑にしないでください。

+0

あなたの答えをありがとう。私の要件は、ファイルが-rフラグまたは-eフラグが存在する場合にのみ必要であるということです。フラグに応じて、ファイルは別々に使用されます。あなたは「サブパラ」の方法について言いました、あなたは私がそれをどうやってできるかの例を挙げることができますか? – user24312

+0

そして、それらが-aフラグを使用していれば?ファイル名を指定しても構いませんか、それともブロックしたいのですか?サブパーザーについては、ドキュメントから始めてください。 「相互に包括的」なグループはありません。 – hpaulj

関連する問題