2011-12-10 13 views
1

argparseの使用に関して助けが必要です。私が達成したいのは、1つの引数だけを渡す必要があるということです。それは、次のいずれかです:--k, --r, --b, --p,(ignore the rest)。引数countが1でなければ、 "usage"情報を出力して終了する。また、プログラムは、対応するオブジェクトを作成するためにどのフラグが渡されるかを知る必要があります。私は何度か試してみましたが、うまくいきませんでした。ありがとう。argparseを使ってpythonコマンドライン引数の助けが必要

+3

「何回も試しましたが、うまくいきません」:試したものを投稿し、正確には動作しないものを説明できますか? –

答えて

4

import argparse 

parser = argparse.ArgumentParser() 
group = parser.add_mutually_exclusive_group() 
group.add_argument('-k', action='store_true') 
group.add_argument('-r', action='store_true') 
group.add_argument('-b', action='store_true') 
group.add_argument('-p', action='store_true') 
parser.parse_args() 

それは以下の例に見られるように、相互に排他的なグループで唯一のオプションは、同時に許可されています:渡されたフラグをチェックするには

$ python test.py -k -r -b -p 
usage: test.py [-h] [-k | -r | -b | -p] 
test.py: error: argument -r: not allowed with argument -k 

、あなただけのparse_args方法(フラグPによって返さargparse.Namespaceオブジェクトを見てする必要がありますassedはTrueに設定されます)。

+0

いい仕事です!それは私が間違ったトラックに完全にいるようだ、サンプルのためのthx! –

3

​​を使用しないでください。それは本当に必要ではないようです。あなたはそれがmutually exclusive groupで達成するために使用する必要がどのような

if len(sys.argv) != 2: 
    print_usage() 
arg = sys.argv[1] 
if arg not in ["--k", "--r", "--b", "--p"]: 
    print_usage() 
# Do whatever you want with arg 
+0

これも問題ありません。 –

関連する問題