argparse 引数のネスト 質問する

argparse 引数のネスト 質問する

Python で次のコードがあります:

parser = argparse.ArgumentParser(description='Deployment tool')
group = parser.add_mutually_exclusive_group()
group.add_argument('-a', '--add', dest='name_to_add', help='Add a new group or a role to existing group')
group.add_argument('-u', '--upgrade', dest='name_to_upgrade', help='Upgrade a group with the new version')
parser.add_argument('--web_port', help='Port of the WEB instance that is being added to the group')

問題は「--web_port」オプションにあります。このオプションを「-a」オプションでのみ追加できるようにし、「-u」では追加できないようにしたいのです。

欲しい「python my_script.py -a name --web_port=XXXX」を実行できるようになります。

欲しくない実行できるようにするには: "python my_script.py -u name --web_port=XXXX"

このように実行できるようにするには、コードをどのように変更すればよいでしょうか?

ありがとう、アルシャフスキー・アレクサンダー。

ベストアンサー1

-aとをオプションにする代わりに-u、サブコマンドにすることもできます。その場合は、サブコマンド--web-portのオプションを作成しますadd

python my_script.py add name --web_port=XXXX
python my_script.py upgrade name

何かのようなもの:

parser = argparse.ArgumentParser(description='Deployment tool')
subparsers = parser.add_subparsers()

add_p = subparsers.add_parser('add')
add_p.add_argument("name")
add_p.add_argument("--web_port")
...

upg_p = subparsers.add_parser('upgrade')
upg_p.add_argument("name")
...

実行しようとすると

my_script.py upgrade name --web_port=1234

認識されない引数「--web_port」に対してエラーが発生します。

同様に、

my_script.py add name upgrade

「add」サブコマンドに位置引数を 1 つしか定義していないため、認識されない引数「upgrade」のエラーが発生します。

言い換えれば、サブコマンドは暗黙的に相互に排他的です。唯一の小さな欠点は、各サブパーサーに「name」位置パラメータを追加する必要があることです。

おすすめ記事