Argparse set from env var
Jump to navigation
Jump to search
https://gist.github.com/orls/51525c86ee77a56ad396
Example 1
import argparse import os class EnvDefault(argparse.Action): def __init__(self, envvar, required=True, default=None, **kwargs): if not default and envvar: if envvar in os.environ: default = os.environ[envvar] if required and default: required = False super(EnvDefault, self).__init__(default=default, required=required, **kwargs) def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, values)
import argparse from envdefault import EnvDefault parser=argparse.ArgumentParser() parser.add_argument( "-u", "--url", action=EnvDefault, envvar='URL', help="Specify the URL to process (can also be specified using URL environment variable)") args=parser.parse_args()
Another Example
import argparse import os # Courtesy of http://stackoverflow.com/a/10551190 with env-var retrieval fixed class EnvDefault(argparse.Action): """An argparse action class that auto-sets missing default values from env vars. Defaults to requiring the argument.""" def __init__(self, envvar, required=True, default=None, **kwargs): if not default and envvar: if envvar in os.environ: default = os.environ[envvar] if required and default: required = False super(EnvDefault, self).__init__(default=default, required=required, **kwargs) def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, values) # functional sugar for the above def env_default(envvar): def wrapper(**kwargs): return EnvDefault(envvar, **kwargs) return wrapper
import argparse from EnvDefault import env_default if __name__ == "__main__": parser = argparse.ArgumentParser( description="use env vars as defaults for argparse" ) parser.add_argument( "--alpha", "-a", action=env_default('ALPHA'), required=False, help="""Optional. Value from CLI will be used if present, or from env var ALPHA. If neither of these is present, value is None becasue no fallback default was given""" ) parser.add_argument( "--beta", "-b", action=env_default('BETA'), required=True, help="""Required. Value from CLI will be used if present, or from env var BETA. If neither of these is present, it's an error""" ) parser.add_argument( "--gamma", "-g", action=env_default('GAMMA'), required=True, default=9001, help="""Value from CLI will be used if present, or from env var GAMMA. If neither of these is present, default of 9001 is used""" ) print parser.parse_args()