【发布时间】:2020-03-15 01:00:45
【问题描述】:
在为我的程序解析参数时,如果未指定为程序的参数,我还希望能够从环境中获取某些参数。
我目前有:
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)
这提供了我想要的功能,但是如果没有给出环境变量并且它们没有在命令行中给出,我希望 argparse 引发 ArgumentError。
environ[keyname] 如果只在命令行中指定而不在 env 变量中指定,则在创建参数时会引发 keyerror,这不是很好。
在创建参数时,像 'allow-none'=false 这样的参数会很棒,但如果有人知道另一种解决方案,那就太棒了。
【问题讨论】:
-
我认为自定义操作可能会对您有所帮助。 docs.python.org/3/library/argparse.html#action
-
@serbia99 我尝试为它实现一个自定义操作,但不幸的是,如果使用默认值,则不会调用该操作,并且不使用默认值的唯一方法是如果一个值被指定,这意味着用户无论如何都必须给出一个值或得到一个错误。无论如何都欢呼!
-
后解析是要走的路,正如您所注意到的,
action.__call__仅在用户提供参数时运行。在默认处理中没有任何东西会触发 ArgumentError,尤其是不会触发自定义消息。
标签: python-2.7 argparse