1

argparseの使用に関して助けが必要です。私が達成したいのは、引数を1つだけ渡す必要があるということです。これは、次のいずれかになります--k, --r, --b, --p,(ignore the rest)。引数の数が1でない場合は、「使用法」情報を出力して終了します。また、プログラムは、対応するオブジェクトを作成するために、どのフラグが渡されるかを知る必要があります。何度か試しましたが、うまくいきません。誰かにヒントを教えてもらえますか?ありがとう。

4

2 に答える 2

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()

以下の例でわかるように、相互に排他的なグループ内の1つのオプションのみが同時に許可されます。

$ 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

argparse.Namespace渡されたフラグを確認するには、メソッドによって返されるオブジェクトを確認するだけですparse_args(渡されたフラグはに設定されますTrue)。

于 2011-12-10T23:12:33.847 に答える
3

全く使わないのはどうargparseですか?本当に必要ではないようです。

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
于 2011-12-10T23:01:28.920 に答える