公司伺服器上的ip最少的也有100多個,有時候查到一個站的Ip, 不想通過OA去查,自己就用自己最近學的python知識,結合資料庫,編寫了一python小程式。實現只要輸入主ip就能查到這台伺服器的子ip,輸入子ip能查到此ip所在的主伺服器。
功能樣本:
使用 -m 參數 指定主伺服器地址,即查詢此伺服器上所有的子ip
使用 -s 參數 指定子ip, 即可查詢此子ip所在的伺服器主ip地址
使用 -h 或 -help 參數可列印help
使用 -v 或-version參數可列印版本
如果程式參數不合法,則提示協助
好了,功能就這麼多,我們來看看怎麼用python 實現的。
一,我們先看一下資料庫,看一下他的結構,其實資料庫裡很簡單,只記錄了ip的對應關係。
如
二,我們來看一下程式是怎麼寫的, 先貼一下程式。
#! /usr/bin/python#Filename select.pyimport MySQLdb,os,sys try: conn = MySQLdb.connect("localhost","root","密碼","ips",charset="utf8")except MySQLdb.OperationalError, message: print "link error" def masterip(ip): sql="select secip from ip_master where masterip='%s'" %ip cursor=conn.cursor() n=cursor.execute(sql) cds=cursor.fetchall() for cd in cds: for col in cd: print "%s" % (col) cursor.close() conn.close() def secip(ip): sql="select masterip from ip_master where secip='%s'" %ip cursor=conn.cursor() n=cursor.execute(sql) cds=cursor.fetchall() for cd in cds: for col in cd: print "%s" % (col) cursor.close() conn.close() if len(sys.argv)<2: print "You have an error in you syntax,please you -help,-h for help" sys.exit() if "-h"==sys.argv[1] or "-help"==sys.argv[1]: print '''\This program select master ips and slave ips.Options include:-s slave ip :use slave ip to select msterip-m masterip :use master ip to select slaveip-h;-help :help-v;-version :prints version ''' sys.exit() elif "-v"==sys.argv[1] or "-version"==sys.argv[1]: print "Version is 0.1" sys.exit() elif "-s"==sys.argv[1]: if len(sys.argv)<3: print "You have an error in you syntax,please you -help,-h for help" sys.exit() ip=sys.argv[2] secip(ip) elif "-m"==sys.argv[1]: if len(sys.argv)<3: print "You have an error in you syntax,please you -help,-h for help" sys.exit() ip=sys.argv[2] masterip(ip) else: print "You have an error in you syntax,please you -help,-h for help"
三.對程式進行解釋
#! /usr/bin/python import MySQLdb,os,sys #載入 mysqldb os systry: conn = MySQLdb.connect("localhost","root","密碼","ips",charset="utf8")except MySQLdb.OperationalError, message: print "link error" #嘗試利用括弧裡的資訊去串連資料庫,如果串連資料庫不成功剛列印link error! def masterip(ip): sql="select secip from ip_master where masterip='%s'" %ip cursor=conn.cursor() n=cursor.execute(sql) cds=cursor.fetchall() for cd in cds: for col in cd: print "%s" % (col) cursor.close() conn.close() # 定義一個masterip函數, 括弧裡的ip 為參數,在下面的sql語句裡用到。sql後面是查詢語句。 利用上面括弧裡定義的ip 去查詢 子ip。再利用for 迴圈逐個列印出ip! def secip(ip): sql="select masterip from ip_master where secip='%s'" %ip cursor=conn.cursor() n=cursor.execute(sql) cds=cursor.fetchall() for cd in cds: for col in cd: print "%s" % (col) cursor.close() conn.close() # 定義一個secip函數, 括弧裡的ip 為參數,在下面的sql語句裡用到。sql後面是查詢語句。 利用上面括弧裡定義的ip 去查詢 主ip。再利用for 迴圈逐個列印出ip! if len(sys.argv)<2: print "You have an error in you syntax,please you -help,-h for help" sys.exit() # 判斷命令列參數,如果命令列參數小於2,(命令本身就屬於一個參數)就列印提示資訊,並退出,此行的意思就是半數命令後面有沒有跟參數,如果沒有跟參數,就直接退出。 if "-h"==sys.argv[1] or "-help"==sys.argv[1]: print '''\This program select master ips and slave ips.Options include:-s slave ip :use slave ip to select msterip-m masterip :use master ip to select slaveip-h;-help :help-v;-version :prints version ''' sys.exit() #判斷命令列第一個資料是不是 -h (注,命令列參數是從0開始,0 也就是命令本身),如果是 -h的話,就列印協助資訊,並退出。 elif "-v"==sys.argv[1] or "-version"==sys.argv[1]: print "Version is 0.1" sys.exit() #判斷命令列第一個資料是不是 -v (注,命令列參數是從0開始,0 也就是命令本身),如果是 -v的話,就列印版本資訊,並退出。 elif "-s"==sys.argv[1]: if len(sys.argv)<3: print "You have an error in you syntax,please you -help,-h for help" sys.exit() ip=sys.argv[2] secip(ip) #判斷命令列第一個資料是不是 -s (注,命令列參數是從0開始,0 也就是命令本身),如果是 -s的話,判斷命令列參數是否小於3,也就是 -s 後面有沒有跟參數(ip), 如果沒跟的話,就列印提示資訊,並退出 。如果跟了的話,就把-s 後面的參數給 ip這個變數,並執行 secip() 這個函數。 elif "-m"==sys.argv[1]: if len(sys.argv)<3: print "You have an error in you syntax,please you -help,-h for help" sys.exit() ip=sys.argv[2] masterip(ip) #判斷命令列第一個資料是不是 -m (注,命令列參數是從0開始,0 也就是命令本身),如果是 -m的話,判斷命令列參數是否小於3,也就是 -m 後面有沒有跟參數(ip), 如果沒跟的話,就列印提示資訊,並退出 。如果跟了的話,就把-m 後面的參數給 ip這個變數,並執行 masterip() 這個函數。 else: print "You have an error in you syntax,please you -help,-h for help"
如果跟上面所有的參數都不符合,就直接列印協助資訊。
Ok!程式完了。很簡單,但好像也很實用。