我有一个Python脚本script.py
,该脚本具有以下init
函数
def __init__(self):
"""init method for the class."""
parser = argparse.ArgumentParser(description="test")
parser.add_argument('-u', '--user', dest='user',
default='', required=True,
action="store", help="the script running user")
parser.add_argument('-i', '--url', dest='url',
default="", required=True,
action="store", help="url")
parser.add_argument('-e', '--env', nargs='*',
dest='env',help="the env type")
parsers = parser.parse_args()
self.user = parsers.user.strip()
self.url = parsers.url.strip()
self.env = parsers.args.env.strip()
env
类型存储两个值test
或prod
。 env
参数应该是可选的,如果未提供值,则其默认值应为prod
,否则应存储提供的任何值(测试/生产)。如果没有传递env的值,则默认值为prod
我尝试使用env
将nargs
参数设置为可选参数,但执行脚本时会抛出错误。
Traceback (most recent call last):
File "script.py", line 185, in <module>
obj = script()
File "script.py", line 66, in __init__
self.env_type = parsers.args.env_type.strip()
AttributeError: 'Namespace' object has no attribute 'args'
我以
的身份执行脚本python script.py -u <user> -i <url> -e <env>
理想情况下,即使没有提供-e
选项,我也希望我的脚本能够执行。
我应该如何更改脚本?
答案 0 :(得分:3)
如果您只希望env为“ prod”或“ test”,则可以使用choices
(docs),其默认值为:
parser.add_argument('-e', '--env', choices=['prod', 'test'], default='prod', help="the env type")
如果将其他内容传递给--env
,则会引发错误。
请注意,在argparse(docs)中,带有-e
--env
等破折号的标记被认为是可选的
答案 1 :(得分:1)
应该没有args
吗?
self.env = parsers.env.strip()
您还可以处理AttributeError:
try:
self.env = parsers.env.strip()
except AttributeError:
self.env = 'prod'