5
私のスクリプトargparseには、反対の種類の別の引数が渡された場合に競合するいくつかの引数があります。 --arg1
が既に存在する場合は、--arg2
を無効にします。現在私はそうする方法を見つけていません。別の引数がある場合に引数を無効にする方法はありますか?
私のスクリプトargparseには、反対の種類の別の引数が渡された場合に競合するいくつかの引数があります。 --arg1
が既に存在する場合は、--arg2
を無効にします。現在私はそうする方法を見つけていません。別の引数がある場合に引数を無効にする方法はありますか?
はmutually exclusive groupを使用します。グループ内
parser = argparse.ArgumentParser(prog='PROG')
group = parser.add_mutually_exclusive_group()
group.add_argument('--arg1')
group.add_argument('--arg2')
だけ引数を使用することが許可されています。
デモ:
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group()
>>> group.add_argument('--arg1')
_StoreAction(option_strings=['--arg1'], dest='arg1', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> group.add_argument('--arg2')
_StoreAction(option_strings=['--arg2'], dest='arg2', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['--arg1', 'foo'])
Namespace(arg1='foo', arg2=None)
>>> parser.parse_args(['--arg2', 'bar'])
Namespace(arg1=None, arg2='bar')
>>> parser.parse_args(['--arg1', 'foo', '--arg2', 'bar'])
usage: PROG [-h] [--arg1 ARG1 | --arg2 ARG2]
PROG: error: argument --arg2: not allowed with argument --arg1
は 'ValueErrorをはじめ:相互に排他的な引数は、理由もなくoptional'する必要があります。 –
@SantoshKumar:それは*理由ですね。オプションがオプションであることを確認してください。例えばユーザーが値を指定する必要はありません。 –
@SantoshKumar:オプションを必要とするものについては、http://docs.python.org/2/library/argparse.html#requiredを参照してください。 –