### argparse class NoFallbackAvailable(Error): pass class Fallback: def __init__(self, parser): self.parser = parser def __call__(self, action): raise NoFallbackAvailable() ### typical usecase import argparse import os class EnvFallback(argparse.Fallback): def __call__(self, action): # potential new attribute for action # if action.is_positional: if not action.option_strings: keys = [ action.metavar ] else: # potential new attribute for action # keys = action.long_option_names keys = [] for arg in action.option_strings: if any([arg.startswith(2*c) for c in self.parser.prefix_chars]): keys += [arg[2:], arg] for key in keys: try: return os.environ['{}_{}'.format(argparse.prog, key).upper()] except KeyError: pass raise argparse.NoFallbackAvailable() parser = argparse.ArgumentParser(fallback=EnvFallback)