2017-04-05 22 views
1

我想執行一個用幾個IP地址做某事的python腳本。這些地址可以通過commad行提供。解析一個IP列表,以python作爲字符串進行argparse

我用下面的命令解析:

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. 我怎樣才能停止分裂的人物

謝謝你的幫助

+0

你可以將它們加回到字符串中......''「」。加入(x)for x in ip]' – user5219763

+0

當沒有給出參數並且它必須引用默認參數時,會不會發生崩潰或更改? – Kev1n91

+0

嗯它的作品,但我不明白爲什麼。謝謝 :) – Kev1n91

回答

3

你想要的是輸入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,那麼這將需要使用字符串操作,包括你的所有角落的情況下手動拆分輸入然後處理,當使用建議的方式時,這些處理由​​自動處理。