Ответ 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'.
Другими словами, подкоманды неявно взаимно исключают друг друга. Единственный крошечная бородавка заключается в том, что вам нужно добавить параметр "имя" для каждого subparser.