python學習之編寫查詢ip程序
公司服務器上的ip最少的也有100多個,有時候查到一個站的Ip, 不想通過OA去查,自己就用自己最近學的python知識,結(jié)合數(shù)據(jù)庫,編寫了一python小程序。實現(xiàn)只要輸入主ip就能查到這臺服務器的子ip,輸入子ip能查到此ip所在的主服務器。
功能示例:

使用 -m 參數(shù) 指定主服務器地址,即查詢此服務器上所有的子ip

使用 -s 參數(shù) 指定子ip, 即可查詢此子ip所在的服務器主ip地址

使用 -h 或 -help 參數(shù)可打印help

使用 -v 或-version參數(shù)可打印版本

如果程序參數(shù)不合法,則提示幫助
好了,功能就這么多,我們來看看怎么用python 實現(xiàn)的。
一,我們先看一下數(shù)據(jù)庫,看一下他的結(jié)構(gòu),其實數(shù)據(jù)庫里很簡單,只記錄了ip的對應關(guān)系。
如下圖

二,我們來看一下程序是怎么寫的, 先貼一下程序。
#! /usr/bin/python
#Filename select.py
import 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 sys
try:
conn = MySQLdb.connect("localhost","root","密碼","ips",charset="utf8")
except MySQLdb.OperationalError, message:
print "link error"
#嘗試利用括號里的信息去連接數(shù)據(jù)庫,如果連接數(shù)據(jù)庫不成功剛打印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函數(shù), 括號里的ip 為參數(shù),在下面的sql語句里用到。sql后面是查詢語句。 利用上面括號里定義的ip 去查詢 子ip。再利用for 循環(huán)逐個打印出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函數(shù), 括號里的ip 為參數(shù),在下面的sql語句里用到。sql后面是查詢語句。 利用上面括號里定義的ip 去查詢 主ip。再利用for 循環(huán)逐個打印出ip!
if len(sys.argv)<2:
print "You have an error in you syntax,please you -help,-h for help"
sys.exit()
# 判斷命令行參數(shù),如果命令行參數(shù)小于2,(命令本身就屬于一個參數(shù))就打印提示信息,并退出,此行的意思就是半數(shù)命令后面有沒有跟參數(shù),如果沒有跟參數(shù),就直接退出。
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()
#判斷命令行第一個數(shù)據(jù)是不是 -h (注,命令行參數(shù)是從0開始,0 也就是命令本身),如果是 -h的話,就打印幫助信息,并退出。
elif "-v"==sys.argv[1] or "-version"==sys.argv[1]:
print "Version is 0.1"
sys.exit()
#判斷命令行第一個數(shù)據(jù)是不是 -v (注,命令行參數(shù)是從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)
#判斷命令行第一個數(shù)據(jù)是不是 -s (注,命令行參數(shù)是從0開始,0 也就是命令本身),如果是 -s的話,判斷命令行參數(shù)是否小于3,也就是 -s 后面有沒有跟參數(shù)(ip), 如果沒跟的話,就打印提示信息,并退出 。如果跟了的話,就把-s 后面的參數(shù)給 ip這個變量,并執(zhí)行 secip() 這個函數(shù)。
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)
#判斷命令行第一個數(shù)據(jù)是不是 -m (注,命令行參數(shù)是從0開始,0 也就是命令本身),如果是 -m的話,判斷命令行參數(shù)是否小于3,也就是 -m 后面有沒有跟參數(shù)(ip), 如果沒跟的話,就打印提示信息,并退出 。如果跟了的話,就把-m 后面的參數(shù)給 ip這個變量,并執(zhí)行 masterip() 這個函數(shù)。
else:
print "You have an error in you syntax,please you -help,-h for help"
如果跟上面所有的參數(shù)都不符合,就直接打印幫助信息。
Ok!程序完了。很簡單,但好像也很實用。
相關(guān)文章
如何通過pycharm實現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作)
這篇文章主要介紹了如何通過pycharm實現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Pytorch實現(xiàn)將label變成one hot編碼的兩種方式
這篇文章主要介紹了Pytorch實現(xiàn)將label變成one hot編碼的兩種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Python matplotlib實戰(zhàn)之漏斗圖繪制
漏斗圖,形如“漏斗”,用于展示數(shù)據(jù)的逐漸減少或過濾過程,這篇文章主要為大家介紹了如何使用Matplotlib繪制漏斗圖,需要的小伙伴可以參考下2023-08-08
selenium框架中driver.close()和driver.quit()關(guān)閉瀏覽器
這篇文章主要介紹了selenium框架中driver.close()和driver.quit()關(guān)閉瀏覽器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
PyQt5 實現(xiàn)給無邊框widget窗口添加背景圖片
這篇文章主要介紹了PyQt5 實現(xiàn)給無邊框widget窗口添加背景圖片的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03

