假設編寫一個登入交換機的腳本,登入交換機時,交換要求輸入賬号、密碼及enable(super)密碼,而用于登入交換機所需要的資訊至少需包括:交換機IP、登入賬号、密碼及enable(super)密碼,這些資訊均存在mysql資料庫中。腳本需從資料庫中讀取該資訊。是以讀取的資料交換機IP、登入賬号、密碼及enable(super)密碼均不能為空。如果為空,則登入交換機肯定失敗,無需再執行後面的登入代碼了。是以有必要對從資料庫中讀取的資料做合規性檢測。
現資料庫中的資訊如下:
mysql> select * from TSwitch;
+--------------+----------+----------+----------------+
| IP | Username | Password | EnablePassword |
+--------------+----------+----------+----------------+
| 192.168.0.80 | admin | cisco | cisco |
| 192.168.0.70 | admin | H3c | NULL |
| 192.168.0.60 | NULL | huawei | huawei |
+--------------+----------+----------+----------------+
從上标可看出,隻有第一行的資料是合規的。第二資料的EnablePassword值為空、第三行資料的Username為空,是以資料不合規,如何進行檢測。
[[email protected] python]# cat chkparavalid.py
#!/usr/bin/env python
#encoding=utf-8
import MySQLdb
def argisvalid(mytuple):
"return 0 if the mylist including Null"
myres=1
for m in mytuple:
if m==None:
myres=0
continue
return myres
def main():
conn= MySQLdb.connect(
host='localhost',
port = 3306,
user='root',
passwd='123456',
db ='mydb',
)
cur = conn.cursor()
sqlstr1=cur.execute("select IP,Username,Password,EnablePassword from TSwitch");
sqlset1=cur.fetchmany(sqlstr1)
for sqlres1 in sqlset1:
print argisvalid(sqlres1)
cur.close()
conn.commit()
conn.close()
if __name__=='__main__':
main()
上面代碼執行的結果是,如果資料不合規,則輸出0,合規則輸出1.
[[email protected] python]# python chkparavalid.py
1
0
0
該腳本的關鍵函數為argisvalid,作用為參數(list或tuple)中如果含None值則傳回0,否則傳回1。