, Это побочный эффект изменений, сделанных некоторое время назад, а не хорошо продуманная функция.

я есть следующий код вscript.py:

import argparse

parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='command')
sp.default = 'a'

a_parser = sp.add_parser('a')
b_parser = sp.add_parser('b')

a_parser.add_argument('--thing', default='thing')
b_parser.add_argument('--nothing', default='nothing')

args = parser.parse_args()
print(args)

Я могу назвать это тремя разными способами:

$ python3 script.py
Namespace(command='a')
$ python3 script.py a
Namespace(command='a', thing='thing')
$ python3 script.py b
Namespace(command='b', nothing='nothing')

Есть только одна проблема с этим: что яхотеть является то, что если я предоставлю нулевые аргументы в командной строке дляa_parser быть тем, кто заканчивает разбор и делает вещи. Очевидно, это не так,sp.default это просто настройкаcommand='a'не то, что я ожидаю, а именно: «О да, пользователь не предоставил никаких аргументов в командной строке, но я знаю, что это должно быть обработаноa_parser, ВотNamespace(command='a', thing='thing')

Есть ли способ, которым яМожно сделать это с argparse? Я искал несколько разных вариантов, но ни один из них действительно не дает того, что мне нужно. Я полагаю, что я мог бы немного поиграть с созданием 3 различных ArgumentParsers и затем передать аргументы каждому из них, хотя это звучит немного грубо.

Есть лучшие варианты?

Ответы на вопрос(1)

Ваш ответ на вопрос