Consider this test argparse example in scratch.py using python 3.7.2:
import sys
import argparse
import yaml
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument('--sound', nargs='?', default=None)
parser.add_argument('greeting')
parser.add_argument('name')
parser.add_argument('params', nargs='*')
return vars(parser.parse_args(sys.argv[1:]))
def main():
print(yaml.dump((get_args())))
if __name__ == "__main__":
main()
If I use it:
(websosadmin) ~/wk/cliosoft/websosadmin/sosadmin_cli $ python scratch.py hello john loud red
greeting: hello
name: john
params:
- loud
- red
sound: null
(websosadmin) ~/wk/cliosoft/websosadmin/sosadmin_cli $ python scratch.py --sound bell hello john loud red
greeting: hello
name: john
params:
- loud
- red
sound: bell
(websosadmin) ~/wk/cliosoft/websosadmin/sosadmin_cli $ python scratch.py hello --sound bell john loud red
greeting: hello
name: john
params:
- loud
- red
sound: bell
(websosadmin) ~/wk/cliosoft/websosadmin/sosadmin_cli $ python scratch.py hello john --sound bell loud red
usage: scratch.py [-h] [--sound [SOUND]] greeting name [params [params ...]]
scratch.py: error: unrecognized arguments: loud red
Why does the fourth case fail?