gpt4 book ai didi

python - 使用 argparse 时将选项从环境变量设置为位置参数

转载 作者:行者123 更新时间:2023-11-30 23:09:33 24 4
gpt4 key购买 nike

我有一个使用 argparse 和位置参数的小程序。我试图允许通过使用环境变量来设置该参数,但没有让它工作。

我看过这篇文章:Setting options from environment variables when using argparse其中提到了同样的问题,但不是针对位置参数。

这是到目前为止的代码:

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)

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('testvar', help="Test variable", action=EnvDefault, envvar='TEST_VAR')
parser.add_argument('--othervar', help="Other variable", action='store_true')
args = parser.parse_args()
if not args.testvar: exit(parser.print_usage())

print args.testvar

这会返回:

$ TEST_VAR="bla" ./test.py 
usage: test.py [-h] [--othervar] testvar
test.py: error: too few arguments

最佳答案

您需要将位置参数设置为可选,请尝试 nargs='?':

...
parser.add_argument('testvar', help="Test variable", action=EnvDefault,
envvar='TEST_VAR', nargs='?')
...

请注意,输出略有变化:

$ python test.py
usage: test.py [-h] [--othervar] [testvar]

注意:有一个副作用 - 即使未设置 env 变量,它也不会返回错误。

关于python - 使用 argparse 时将选项从环境变量设置为位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com