実行する事前定義されたアクションのリストをユーザーに要求するスクリプトがあります。また、ユーザーが何も定義していないときに、特定のアクションのリストを想定できるようにしたいです。ただし、これらの両方を一緒に実行しようとすることは不可能のようです。
ユーザーが引数を指定しない場合、デフォルトの選択が無効であるというエラーを受け取ります
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']])