如何使用Python的argparse库支持同一个参数多次重复传入
实现argparse同一参数多次指定的方法
该需求完全可以实现,核心是用到add_argument方法的action='append'配置项,该配置会把每次指定参数传入的值追加到列表中,不会出现后续值覆盖前面值的问题。
基础实现:单次-i后跟单个值,支持多次指定-i
如果你只需要支持$ myscript -i host1 -i host2的传参形式,也就是每次-i后面仅跟1个host值,配置写法如下:
import argparse parser = argparse.ArgumentParser() # action='append' 表示每次遇到-i参数,就把对应值追加到列表中 parser.add_argument('-i', action='append', required=True, help='指定目标主机,可多次指定') args = parser.parse_args() print(args.i) # 执行示例命令后输出 ['host1', 'host2']
进阶实现:同时兼容两种传参形式
如果你需要同时支持「单次-i后跟多个值」和「多次指定-i」两种传参方式,也就是同时兼容$ myscript -i host1 host2和$ myscript -i host1 -i host2,可以把nargs和action='append'搭配使用:
import argparse parser = argparse.ArgumentParser() # nargs='+' 表示每次-i后面可接1个或多个值,action='append'把每次的结果追加到列表 parser.add_argument('-i', nargs='+', action='append', required=True, help='指定目标主机,可多次指定,单次也可传入多个主机') args = parser.parse_args() # 此时得到的args.i是嵌套列表,比如传入-i host1 -i host2 host3 会得到 [['host1'], ['host2', 'host3']] # 可以用列表推导式展平得到所有主机的一维列表 host_list = [host for group in args.i for host in group] print(host_list) # 执行上述示例命令后输出 ['host1', 'host2', 'host3']
如果需要允许-i后不跟任何值,可以把nargs='+'替换为nargs='*'。
内容的提问来源于stack exchange,提问作者shepster
相关产品推荐
相关产品推荐

