解析程序的参数时,如果未指定为程序的参数,我也希望能够从环境中获取某些参数。
我目前有:
parser = argparse.ArgumentParser(
description="Foo Bar Baz")
parser.add_argument('--metadata-api-user', type=str,
help='Username for basic authentication access to the metadata API. If not given, will be extracted from env variable {}'.format("API_USER"),
default=os.environ.get("API_USER"))
parser.add_argument('--metadata-api-password', type=str,
help='Password for basic authentication access to the metadata API. If not given, will be extracted from env variable {}'.format("API_PASS"),
default=os.environ.get("API_PASS"))
parser.add_argument('--version', type=int, help='Version number', default=1)
parser.add_argument('--location', type=str, help='Location to place thing (default: ./)',default="./")
args = parser.parse_args(args)
这提供了我想要的功能,但是如果未在命令行中未给env变量和,我希望argparse引发ArgumentError。
environ [keyname]如果仅在命令行而不是在env变量中指定,则创建参数时会在创建参数时引发键盘错误,这不是很好。
创建参数时,像'allow-none'= false这样的参数非常有用,但是如果有人知道另一种解决方案,那就太棒了。
不幸的是,我无法找到解决方案,所以我不得不为可以从env变量获取的每个参数添加以下内容:
api_user_action = parser.add_argument('--metadata-api-user', type=str,
help='Username for basic authentication access to the metadata API. If not given, will be extracted from env variable {}'.format("API_USER"),
default=os.environ.get("API_USER"))
...
if args.metadata_api_user is None:
raise argparse.ArgumentError(api_user_action,
"API Username was not supplied in either command line or environment variables. \n" + parser.format_help())
如果两者都不提供,则会打印用法和适当的错误消息,但需要从每个适用的参数中重复此用法。