#!/usr/bin/env python import argparse parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('--foo') parser.add_argument('command') parser.add_argument('args', nargs=argparse.REMAINDER) try: # this works and parses correctly, from the example print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split())) except SystemExit as e: print(e) try: # this works and parses correctly too print(parser.parse_args('cmd --arg1 XX ZZ'.split())) except SystemExit as e: print(e) try: # this doesn't work print(parser.parse_args('--foo B --arg1 XX ZZ'.split())) except SystemExit as e: print(e) try: # this doesn't work print(parser.parse_args('--arg1 XX ZZ'.split())) except SystemExit as e: print(e)