python小實戰之分配ip

python小實戰之分配ip


一、背景介紹

    由於工作需要,管理着公司的全球機房ip,其他部門同事提取工單需要我這邊協助分配一些ping不通的ip來使用。故而有時候會出現大工作量的情況。今日值班正好不巧,碰見同事需要分配16*64個ip,所以身爲小菜的我花了1個小時寫了的小程序以分配ip,特此記錄以便後期回顧優化,也歡迎各位指點優化下。


二、涉及知識點

    os模塊,使python可以與系統進行交互執行命令。

    os.system()    #執行系統命令並返回狀態碼

##系統幫助文檔
>> help(os.system)
Help on built-in function system in module posix:

system(...)
    system(command) -> exit_status
    
    Execute the command (a string) in a subshell.


2.1 os.system()使用摸索

    os.system()具體使用如下:

##代碼展示
ip_str = "ping -c 10 -i 0.2 -w 3  192.168.137.1 &> /dev/null"
In [38]: t = os.system(ip_str)

In [39]: print t 
0

##t = 0表示ip可以ping通,相反不爲0則表示ping不通。
In [34]: if t == 0:
    ...:     print "True"
    ...: else :
    ...:     print t 
    ...:     
True

In [31]: if t == 0:
    ...:     print "True"
    ...: else :
    ...:     print t 
    ...:     
256


三、 ping.py小程序


3.1 ping.py的具體代碼

[root@test home]# cat ping.py 
#/usr/local/python
#coding:utf-8
##定義ping的函數,參數有前三段ip段,第四段ip的起始,以及需要的ip個數
 

import os ##調用os.system()執行ping命令
def batchPing(head='192.168.137',start=0,end=12,num = 10):
	tmp = [] 
	#count = 0
	for i in range(start,end+1):
		#count += 1	
		#ip_str = 'ping -c 10' +head + '.' + str(i) 
		ip_str = "%s %s.%s %s" %('ping -c 10 -i 0.2 -w 3',head,str(i),'&> /home/ipresult.txt') 
		#print "di %s ci : %s" %(count,ip_str)
		##執行ping命令
		res = os.system(ip_str)
		if res  != 0:
			tmp.append(ip_str)
	return tmp[:num]

##將上述整理的ip寫入到文件中去			
def operateFile(tmp=[]):
	with open('/home/useableIp.txt','w') as files:
		for i in tmp:
			#i = i.strip('&> /home/ipresult.txt')
			i = i.split(' ')[7]
			files.write('%s\n' %i)
	return "Done"
	
	
if __name__ == "__main__":
	linshi =  batchPing(head='112.90.148',start=237,end=254,num = 64)
	print operateFile(linshi)


3.2 分析代碼:

  1.拼接字符串的過於冗長ip_str = "%s %s.%s %s" %('ping -c 10 -i 0.2 -w 3',head,str(i),'&> /home/ipresult.txt')。可以寫成' '.join(列表)。列表名 = ['ping -c 10 -i 0.2 -w 3',head,str(i),'&> /home/ipresult.txt']。這樣應該會美觀很多。


  2.定義batchPing(head='192.168.137',start=0,end=12,num = 10)函數,是由於ip地址前三段的ip基本不變,僅最後一段更改,所有拆分成head和最後一位ip兩段,遍歷最後一個ip的開頭start和結束end,在提取出自己想要的ip格式num.處理好後作爲函數的返回值return回去。


  3.將return返回值寫入文件/home/useableIp.txt中,以便記錄。


  4.個人感覺參數的賦值(linshi =  batchPing(head='112.90.148',start=237,end=254,num = 64))也略有不雅,可以試試列表或字典的方式即*或者**。當然小程序的任務當然是完成工作,目前工作已經完成了,僅此記錄下。便於他日回溯今日思路並優化這段小程序。


  5.其實程序bug多多,比如在ping ip環節處,本人是採取ping完後再獲取自己想要的數目;若是能夠一遍ping一遍累加等足夠自己想要的數目就終止的話,這樣程序的執行時間在某種程度上會有很大的縮減的




總結:

    學習要有定位,明確目標地去學習。學是爲了更好的使用,提高自己的工作效率。for growing ---leaves

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章