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

时间:2017-04-05 13:56:49

标签: python string argparse

我想执行一个python脚本,它可以处理多个IP地址。这些地址可以通过commad line给出。

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

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

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

  

[['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. 如何停止按字符拆分
  3. 感谢您的帮助

1 个答案:

答案 0 :(得分:6)

你想要的是只用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自动处理。