import argparse import os """ Basic example that supplies all arguments via env vars export EXAMPLE_POS1=Pos1 export EXAMPLE_POS2=Pos2 export EXAMPLE_NAMED1='[val one,val two]' export EXAMPLE_NAMED2= export python3 example.py """ def env_fallback(parser, action): if not action.option_strings: keys = [ action.metavar ] else: keys = [] for arg in action.option_strings: if any([arg.startswith(2*c) for c in parser.prefix_chars]): keys.append(arg[2:]) for key in keys: try: raw = os.environ['{}_{}'.format(parser.prog, key).upper()] # booleans need special handling if isinstance(action, argparse._StoreTrueAction): if raw.lower() == 'false': raise argparse.NoFallbackAvailable() else: return [] if len(raw) > 1 and raw[0] == '[' and raw[-1] == ']': return raw[1:-1].split(',') else: return [raw] except KeyError: pass raise argparse.NoFallbackAvailable() parser = argparse.ArgumentParser(fallback=env_fallback, prog='example') parser.add_argument('a', metavar='pos1') parser.add_argument('b', metavar='pos2') parser.add_argument('--named1', required=True, nargs=2) parser.add_argument('--named2', action='store_true') args = parser.parse_args() print(args)