将 IP 列表解析为 python 中的 argparse 作为字符串

Parsing a list of IPs to argparse in python as string

我想执行一个 python 脚本来处理多个 IP 地址。这些地址可以通过命令行给出。

我使用以下命令进行解析:

parser.add_argument('--IP',dest='Adresses',help='some Ips', 
default=['192.168.2.15','192.168.2.3'],type=list,nargs='+')

但是,当我通过如下命令 运行 脚本时:

python script.py --IP 192.168.2.15,192.168.2.3

它在每个字符后拆分字符串,如果我使用 space 而不是逗号,则会发生相同的行为,所以如果我打印出来,会发生以下输出

[['1', '9', '2', '.', '1', '6', '8', '.', '2', '.', '1', '5'], ['1', '9', '2', '.', '1', '6', '8', '.', '2', '.', '3']]

我渴望拥有的是:

['192.168.2.15','192.168.2.3']

如默认参数所述

所以有两件事我没有在这里工作:

  1. 如何在一个参数下将多个字符串解析为 argparse,以便它在列表中分开
  2. 如何停止按字符拆分

感谢您的帮助

您想要的是键入 str(默认值),仅包含 nargs=+,然后将地址作为真实的、单独的参数提供给进程。

所以:

parser.add_argument('--IP', dest='Adresses', help='some Ips', 
                    default=['192.168.2.15','192.168.2.3'], nargs='+')

使用两个参数调用时将产生以下结果:

parser.parse_args(['--IP', '123.45', '123.34'])
Namespace(Adresses=['123.45', '123.34'])

这将转换为以下命令行调用:

python script.py --IP 123.45 123.34

这是使用 nargs=+ 的预期方式,其中 type 参数定义每个列表元素的元素类型。

如果你真的想使用 IP1,IP2 格式,你需要提供一个自定义检查函数,如图 here,然后需要使用字符串操作手动拆分输入,包括您当时必须处理的所有极端情况,这些情况在使用建议的方式时由 argparse 自动处理。