公司服務器上的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!程序完了。很簡單,但好像也很實用。

























