python argparse - необязательный аргумент добавления с вариантами выбора

У меня есть сценарий, в котором я запрашиваю у пользователя список заранее определенных действий, которые нужно выполнить. Я также хочу иметь возможность предполагать определенный список действий, когда пользователь ничего не определяет. однако кажется, что попытаться сделать и то и другое вместе невозможно.

когда пользователь не дает аргументов, они получают сообщение об ошибке, что выбор по умолчанию недействителен

acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args([])
>>> usage: [-h] [{clear,copy,dump,lock} [{clear,copy,dump,lock} ...]]
: error: argument action: invalid choice: [['dump', 'clear']] (choose from 'clear', 'copy', 'dump', 'lock')

, и когда они определяют набор действий, в результирующем пространстве имен действия пользователя добавляются к значениям по умолчанию, а не заменяют собой действия по умолчанию.

acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args(['lock'])
args
>>> Namespace(action=[['dump', 'clear'], ['dump']])
17
задан Ciro Santilli 新疆改造中心法轮功六四事件 19 December 2014 в 17:14
поделиться