我想执行一个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']
如默认参数中所述
所以有两件事我不能在这里工作:
感谢您的帮助
答案 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
自动处理。