import argparse parser = argparse.ArgumentParser() parser.add_argument('--format', required=True, choices=['binary', 'xml', 'text']) args, rem_args = parser.parse_known_args() if (args.format == "text"): parser.add_argument('--encoding', required=True) parser.parse_args(rem_args, namespace=args) # this does not work since required argument has already been consumed