记录一下在py中使用argparse解析位置参数时, 位置参数设置为choice(列表)时, 默认值的问题.
算个小坑吧, 所以记录一下.
先来看看直接使用default的情况. 我们的想法是 第一个位置参数为 start/stop/status 第二个位置参数为monitor/transclient/all, 没写的时候默认为 status all
import argparse
parser = argparse.ArgumentParser(add_help=True, description='ei client')
parser.add_argument('action', default='status', choices=['start','stop','status'], action='store', )
parser.add_argument('service', default='all', choices=['monitor','transclient','all'], action='store', )
parser.add_argument('--config', '-c', action='store', dest="config", default='ei.yaml', )
parser_instance = parser.parse_args()
print(parser_instance.action, parser_instance.service)测试结果如下:

发现并没有达到我们的预期, 默认值未生效
其实官方有说明的...

import argparse
parser = argparse.ArgumentParser(add_help=True, description='ei client')
parser.add_argument('action', nargs='?', default='status', choices=['start','stop','status'], action='store', )
parser.add_argument('service', nargs='?', default='all', choices=['monitor','transclient','all'], action='store', )
parser.add_argument('--config', '-c', action='store', dest="config", default='ei.yaml', )
parser_instance = parser.parse_args()
print(parser_instance.action, parser_instance.service)
现在就符合预期结果了.
其实后来发现官网也有说明, 只是之前看的时候没有看仔细....

附python官网configparser链接: https://docs.python.org/zh-cn/3.11/library/configparser.html
官网资料很全的, 仔细看, 慢慢看.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。