私はPythonを学び始めましたが、今ではの大きなメリットを学んでいargparse
ます。を使用してargparse
、引数の2つのグループを作成しました:group_list
とgroup_simulate
。各グループには独自の引数があります。ユーザーは、各グループで1つの引数のみを指定できます(を使用して実現parser.add_mutually_exclusive_group()
)。
そして今、ユーザーが一方だけではなく両方のグループから引数を指定した場合、私のターゲットは構文エラーを提示します-argparse
これとこれが指定されたかどうかを尋ねるメソッドを書くことによってではなく、の機能を使用してこれを達成したい印刷構文エラー。
import argparse
parser = argparse.ArgumentParser(
description='this is the description',
epilog="This is the epilog",
argument_default=argparse.SUPPRESS
)
parser.add_argument('-v', '--verbose', help='verbose', action='store_true', default=False)
group_list = parser.add_mutually_exclusive_group()
group_list.add_argument('-m', help='list only modules', action='store_const', dest='list', const='modules', default='all')
group_list.add_argument('-p', help='list only ports', action='store_const', dest='list', const='ports', default='all')
group_list.add_argument('--list', help='list only module or ports', choices=['modules','ports'], metavar='<modules/ports>', default='all')
group_simulate = parser.add_mutually_exclusive_group()
group_simulate.add_argument('-M', help='simulate module down', nargs=1, metavar='module_name', dest='simulate')
group_simulate.add_argument('-P', help='simulate FC port down', nargs=1, metavar='fc_port_name', dest='simulate')
group_simulate.add_argument('-I', help='simulate iSCSI port down', nargs=1, metavar='iSCSI_port_name', dest='simulate')
group_simulate.add_argument('--simulate', help='simulate module or port down', nargs=1, dest='simulate')
args = parser.parse_args()
print args
つまり、より具体的に話す:
許可された:
test.py
output: Namespace(list='all', verbose=False)
test.py -m
output: Namespace(list='modules', verbose=False)
test.py -P asfasf
output: Namespace(P=['asfasf'], list='all', verbose=False)
禁止されている:
test.py -m -P asfsaf
expected output: <the help message>
test.py -P asfasf -m
expected output: <the help message>
add_subparsers
fromのオプションを使用して目的の目標を達成しようとしましたargparse
が、成功しませんでした。
だから私の質問は、この状況をどのように達成するかです。