我经常使用此模式,以至于我打包了一个简单的操作类来处理它:
import argparseimport osclass 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 argparsefrom envdefault import EnvDefaultparser=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()



