ArgParse参数错误,如果是默认值或给定值,则无

问题描述 投票:1回答:1

解析程序的参数时,如果未指定为程序的参数,我也希望能够从环境中获取某些参数。

我目前有:

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这样的参数非常有用,但是如果有人知道另一种解决方案,那就太棒了。

python-2.7 argparse
1个回答
0
投票

不幸的是,我无法找到解决方案,所以我不得不为可以从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())

如果两者都不提供,则会打印用法和适当的错误消息,但需要从每个适用的参数中重复此用法。

© www.soinside.com 2019 - 2024. All rights reserved.