- 相關(guān)推薦
python運(yùn)維腳本實(shí)例
file是一個(gè)類,使用file('file_name', 'r+')這種方式打開文件,返回一個(gè)file對(duì)象,以寫模式打開文件不存在則會(huì)被創(chuàng)建。但是更推薦使用內(nèi)置函數(shù)open()來打開一個(gè)文件 .
首先open是內(nèi)置函數(shù),使用方式是open('file_name', mode, buffering),返回值也是一個(gè)file對(duì)象,同樣,以寫模式打開文件如果不存在也會(huì)被創(chuàng)建一個(gè)新的。
f=open('/tmp/hello','w')
#open(路徑+文件名,讀寫模式)
#讀寫模式:r只讀,r+讀寫,w新建(會(huì)覆蓋原有文件),a追加,b二進(jìn)制文件.常用模式
如:'rb','wb','r+b'等等
讀寫模式的類型有:
ru 或 ua 以讀方式打開, 同時(shí)提供通用換行符支持 (pep 278)
w 以寫方式打開,
a 以追加模式打開 (從 eof 開始, 必要時(shí)創(chuàng)建新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 (參見 w )
a+ 以讀寫模式打開 (參見 a )
rb 以二進(jìn)制讀模式打開
wb 以二進(jìn)制寫模式打開 (參見 w )
ab 以二進(jìn)制追加模式打開 (參見 a )
rb+ 以二進(jìn)制讀寫模式打開 (參見 r+ )
wb+ 以二進(jìn)制讀寫模式打開 (參見 w+ )
ab+ 以二進(jìn)制讀寫模式打開 (參見 a+ )
注意:
1、使用'w',文件若存在,首先要清空,然后(重新)創(chuàng)建,
2、使用'a'模式 ,把所有要寫入文件的數(shù)據(jù)都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,將自動(dòng)被創(chuàng)建。
f.read([size]) size未指定則返回整個(gè)文件,如果文件大小>2倍內(nèi)存則有問題.f.read()讀到文件尾時(shí)返回""(空字串)
file.readline() 返回一行
file.readline([size]) 返回包含size行的列表,size 未指定則返回全部行
for line in f:
print line #通過迭代器訪問
f.write("hello\n") #如果要寫入字符串以外的數(shù)據(jù),先將他轉(zhuǎn)換為字符串.
http://m.emrowgh.coml() 返回一個(gè)整數(shù),表示當(dāng)前文件指針的位置(就是到文件頭的比特?cái)?shù)).
f.seek(偏移量,[起始位置])
用來移動(dòng)文件指針
偏移量:單位:比特,可正可負(fù)
起始位置:0-文件頭,默認(rèn)值;1-當(dāng)前位置;2-文件尾
f.close() 關(guān)閉文件
要進(jìn)行讀文件操作,只需要把模式換成'r'就可以,也可以把模式為空不寫參數(shù),也是讀的意思,因?yàn)槌绦蚰J(rèn)是為'r'的。
>>>f = open('a.txt', 'r')
>>>f.read(5)
'hello'
read( )是讀文件的方法,括號(hào)內(nèi)填入要讀取的字符數(shù),這里填寫的字符數(shù)是5,如果填寫的是1那么輸出的就應(yīng)該是‘h’。
打開文件文件讀取還有一些常用到的技巧方法,像下邊這兩種:
1、read( ):表示讀取全部?jī)?nèi)容
2、readline( ):表示逐行讀取
一、用python寫一個(gè)列舉當(dāng)前目錄以及所有子目錄下的文件,并打印出絕對(duì)路徑
#!/usr/bin/env python
import os
for root,dirs,files in os.walk('/tmp'):
for name in files:
print (os.path.join(root,name))
os.walk()
原型為:os.walk(top, topdown=true, onerror=none, followlinks=false)
我們一般只使用第一個(gè)參數(shù)。(topdown指明遍歷的順序)
該方法對(duì)于每個(gè)目錄返回一個(gè)三元組,(dirpath, dirnames, filenames)。
第一個(gè)是路徑,第二個(gè)是路徑下面的目錄,第三個(gè)是路徑下面的非目錄(對(duì)于windows來說也就是文件)
os.listdir(path)
《python運(yùn)維腳本實(shí)例》全文內(nèi)容當(dāng)前網(wǎng)頁未完全顯示,剩余內(nèi)容請(qǐng)?jiān)L問下一頁查看。
其參數(shù)含義如下。path 要獲得內(nèi)容目錄的路徑
二、寫程序打印三角形
#!/usr/bin/env python
input = int(raw_input('input number:'))
for i inrange(input):
for j in range(i):
print '*',
print '\n'
三、猜數(shù)器,程序隨機(jī)生成一個(gè)個(gè)位數(shù)字,然后等待用戶輸入,輸入數(shù)字和生成數(shù)字相同則視為成功。成功則打印三角形。失敗則重新輸入(提示:隨機(jī)數(shù)函數(shù):random)
#!/usr/bin/env python
import random
while true:
input = int(raw_input('input number:'))
random_num = random.randint(1, 10)
print input,random_num
if input == random_num:
for i in range(input):
for j in range(i):
print '*',
print '\n'
else:
print 'please input number again'
四、請(qǐng)按照這樣的日期格式(xx-xx-xx-xx)每日生成一個(gè)文件,例如今天生成的文件為2017-09-23.log, 并且把磁盤的使用情況寫到到這個(gè)文件中。
#!/usr/bin/env python
#!coding=utf-8
import time
import os
new_time =time.strftime('%y-%m-%d')
disk_status =os.popen('df -h').readlines()
str1 = ''.join(disk_status)
f =file(new_time+'.log','w')
f.write('%s' % str1)
f.flush()
f.close()
五、統(tǒng)計(jì)出每個(gè)ip的訪問量有多少?(從日志文件中查找)
#!/usr/bin/env python
#!coding=utf-8
list = []
f = file('/tmp/1.log')
str1 =f.readlines()
f.close()
for i in str1:
ip = i.split()[0]
list.append(ip)
list_num = set(list)
for j in list_num:
num = http://m.emrowgh.comunt(j)
print '%s : %s' %(j,num)
1. 寫個(gè)程序,接受用戶輸入數(shù)字,并進(jìn)行校驗(yàn),非數(shù)字給出錯(cuò)誤提示,然后重新等待用戶輸入。
2. 根據(jù)用戶輸入數(shù)字,輸出從0到該數(shù)字之間所有的素?cái)?shù)。(只能被1和自身整除的數(shù)為素?cái)?shù))
#!/usr/bin/env python
#coding=utf-8
import tab
import sys
while true:
try:
n = int(raw_input('請(qǐng)輸入數(shù)字:').strip())
for i in range(2, n + 1):
for x in range(2, i):
《python運(yùn)維腳本實(shí)例》全文內(nèi)容當(dāng)前網(wǎng)頁未完全顯示,剩余內(nèi)容請(qǐng)?jiān)L問下一頁查看。
if i % x == 0:
break
else:
print i
except valueerror:
print('你輸入的不是數(shù)字,請(qǐng)重新輸入:')
except keyboardinterrupt:
sys.exit('\n')
python練習(xí) 抓取web頁面
from urllib import urlretrieve
def firstnonblank(lines):
for eachline in lines:
if noteachline.strip():
continue
else:
return eachline
def firstlast(webpage):
f=open(webpage)
lines=f.readlines()
f.close
print firstnonblank(lines), #調(diào)用函數(shù)
lines.reverse()
print firstnonblank(lines),
def download(url= 'http://m.emrowgh.com',process=firstlast):
try:
retval =urlretrieve(url) [0]
except ioerror:
retval = none
if retval:
process(retval)
if __name__ == '__main__':
download()
python中的sys.argv[]用法練習(xí)
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
def readfile(filename):
f = file(filename)
while true:
filecontext =f.readline()
if len(filecontext) ==0:
break;
print filecontext
f.close()
iflen(sys.argv)< 2:
print "no function be setted."
sys.exit()
ifsys.argv[1].startswith("-"):
option = sys.argv[1][1:]
if option == 'version':
print "version1.2"
elif option == 'help':
print "enter an filename to see the context of it!"
else:
print "unknown function!"
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)
python迭代查找目錄下文件
#兩種方法
#!/usr/bin/env python
import os
dir='/root/sh'
'''
def fr(dir):
filelist=os.listdir(dir)
for i in filelist:
fullfile=os.path.join(dir,i)
if not os.path.isdir(fullfile):
if i == "1.txt":
#print fullfile
os.remove(fullfile)
else:
fr(fullfile)
'''
'''
def fw()dir:
for root,dirs,files in os.walk(dir):
for f in files:
if f == "1.txt":
#os.remove(os.path.join(root,f))
print os.path.join(root,f)
'''
一、ps 可以查看進(jìn)程的內(nèi)存占用大小,寫一個(gè)腳本計(jì)算一下所有進(jìn)程所占用內(nèi)存大小的和。
(提示,使用ps aux 列出所有進(jìn)程,過濾出rss那列,然后求和)
#!/usr/bin/env python
#!coding=utf-8
import os
list = []
sum = 0
str1 = os.popen('ps aux','r').readlines()
for i in str1:
str2 =i.split()
new_rss = str2[5]
list.append(new_rss)
for i in list[1:-1]:
num = int(i)
sum = sum + num
print '%s:%s' %(list[0],sum)
寫一個(gè)腳本,判斷本機(jī)的80端口是否開啟著,如果開啟著什么都不做,如果發(fā)現(xiàn)端口不存在,那么重啟一下httpd服務(wù),并發(fā)郵件通知你自己。腳本寫好后,可以每一分鐘執(zhí)行一次,也可以寫一個(gè)死循環(huán)的腳本,30s檢測(cè)一次。
#!/usr/bin/env python
#!coding=utf-8
import os
import time
import sys
import smtplib
from email.mime.text import mimetext
from email.mimemultipart import mimemultipart
def sendsi-mp-lemail (warning):
msg = mimetext(warning)
msg['subject'] = 'python first mail'
msg['from'] = 'root@localhost'
try:
smtp =smtplib.smtp()
http://m.emrowgh.comnnect(r'http://m.emrowgh.com')
smtp.login('要發(fā)送的郵箱名', '密碼')
smtp.sendmail('要發(fā)送的郵箱名', ['要發(fā)送的郵箱名'], msg.as_string())
smtp.close()
except exception, e:
print e
while true:
http_status = os.popen('netstat -tulnp | grep httpd','r').readlines()
try:
if http_status == []:
os.system('service httpd start')
new_http_status =os.popen('netstat -tulnp | grep httpd','r').readlines()
str1 = ''.join(new_http_status)
is_80 =str1.split()[3].split(':')[-1]
if is_80 != '80':
print 'httpd 啟動(dòng)失敗'
else:
print 'httpd 啟動(dòng)成功'
sendsi-mp-lemail(warning = "this is a warning!!!")#調(diào)用函數(shù)
else:
print 'httpd正常'
time.sl-ee-p(5)
except keyboardinterrupt:
sys.exit('\n')
#!/usr/bin/python
#-*- coding:utf-8 -*-
#輸入這一條就可以在python腳本里面使用漢語注釋!此腳本可以直接復(fù)制使用;
while true: #進(jìn)入死循環(huán)
input = raw_input('please input your username:')
#交互式輸入用戶信息,輸入input信息;
if input == "wenlong":
#如果input等于wenlong則進(jìn)入此循環(huán)(如果用戶輸入wenlong)
password = raw_input('please input your pass:')
#交互式信息輸入,輸入password信息;
p = '123'
#設(shè)置變量p賦值為123
while password != p:
#如果輸入的password 不等于p(123), 則進(jìn)此入循環(huán)
password = raw_input('please input your pass again:')
#交互式信息輸入,輸入password信息;
if password == p:
#如果password等于p(123),則進(jìn)入此循環(huán)
print 'welcome to se-le-ct system!' #輸出提示信息;
while true:
#進(jìn)入循環(huán);
match = 0
#設(shè)置變量match等于0;
input = raw_input("please input the name whom you want to search :")
#交互式信息輸入,輸入input信息;
while not input.strip():
#判斷input值是否為空,如果input輸出為空,則進(jìn)入循環(huán);
input = raw_input("please input the name whom you want to search :")
#交互式信息輸入,輸入input信息;
name_file = file('search_name.txt')
#設(shè)置變量name_file,file('search_name.txt')是調(diào)用名為search_name.txt的文檔
while true:
#進(jìn)入循環(huán);
line = name_file.readline() #以行的形式,讀取search_name.txt文檔信息;
if len(line) == 0: #當(dāng)len(name_file.readline() )為0時(shí),表示讀完了文件,len(name_file.readline() )為每一行的字符長(zhǎng)度,空行的內(nèi)容為\n也是有兩個(gè)字符。len為0時(shí)進(jìn)入循環(huán);
break #執(zhí)行到這里跳出循環(huán);
if input in line: #如果輸入的input信息可以匹配到文件的某一行,進(jìn)入循環(huán);
print 'match item: %s' %line #輸出匹配到的行信息;
match = 1 #給變量match賦值為1
if match == 0 : #如果match等于0,則進(jìn)入 ;
print 'no match item found!' #輸出提示信息;
else: print "sorry ,user %s not found " %input #如果輸入的用戶不是wenlong,則輸出信息沒有這個(gè)用戶;
#!/usr/bin/python
while true:
input = raw_input('please input your username:')
if input == "wenlong":
password = raw_input('please input your pass:')
p = '123'
while password != p:
password = raw_input('please input your pass again:')
if password == p:
print 'welcome to se-le-ct system!'
while true:
match = 0
input = raw_input("please input the name whom you want to search :")
while not input.strip():
print 'no match item found!'
input = raw_input("please input the name whom you want to search :")
name_file = file('search_name.txt')
while true:
line = name_file.readline()
if len(line) == 0:
break
if input in line:
print 'match item: ' , line
match = 1
if match == 0 :
print 'no match item found!'
else: print "sorry ,user %s not found " %input
python監(jiān)控cpu情況
1、實(shí)現(xiàn)原理:通過snmp協(xié)議獲取系統(tǒng)信息,再進(jìn)行相應(yīng)的計(jì)算和格式化,最后輸出結(jié)果
2、特別注意:被監(jiān)控的機(jī)器上需要支持snmp。yum install -y net-snmp*安裝
"""
#!/usr/bin/python
import os
def getallitems(host, oid):
sn1 =os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid + '|grep raw|grep cpu|grep -v kernel').read().split('\n')[:-1]
return sn1
def getdate(host):
items = getallitems(host, '.1.3.6.1.4.1.2021.11')
date = []
rate = []
cpu_total = 0
#us = us+ni, sy = sy + irq + sirq
for item in items:
float_item =float(item.split(' ')[3])
cpu_total += float_item
if item == items[0]:
date.append(float(item.split(' ')[3]) + float(items[1].split(' ')[3]))
elif item == item[2]:
date.append(float(item.split(' ')[3] + items[5].split(' ')[3] + items[6].split(' ')[3]))
else:
date.append(float_item)
#calculate cpu usage percentage
for item in date:
rate.append((item/cpu_total)*100)
mean = ['%us','%ni','%sy','%id','%wa','%cpu_irq','%cpu_sirq']
#calculate cpu usage percentage
result =map(none,rate,mean)
return result
if __name__ == '__main__':
hosts = ['192.168.10.1','192.168.10.2']
for host in hosts:
print '==========' + host + '=========='
result = getdate(host)
print 'cpu(s)',
#print result
for i in range(5):
print ' %.2f%s' % (result[i][0],result[i][1]),
python監(jiān)控系統(tǒng)負(fù)載
1、實(shí)現(xiàn)原理:通過snmp協(xié)議獲取系統(tǒng)信息,再進(jìn)行相應(yīng)的計(jì)算和格式化,最后輸出結(jié)果
2、特別注意:被監(jiān)控的機(jī)器上需要支持snmp。yum install -y net-snmp*安裝
"""
#!/usr/bin/python
import os
def getallitems(host, oid):
sn1 =os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('\n')
return sn1
def getload(host,loid):
load_oids = '1.3.6.1.4.1.2021.10.1.3.' + str(loid)
return getallitems(host,load_oids)[0].split(':')[3]
if __name__ == '__main__':
hosts = ['192.168.10.1','192.168.10.2']
#check_system_load
print '==============system load=============='
for host in hosts:
load1 = getload(host, 1)
load10 = getload(host, 2)
load15 = getload(host, 3)
print '%s load(1min): %s ,load(10min): %s ,load(15min): %s' % (host,load1,load10,load15)
python監(jiān)控網(wǎng)卡流量
1、實(shí)現(xiàn)原理:通過snmp協(xié)議獲取系統(tǒng)信息,再進(jìn)行相應(yīng)的計(jì)算和格式化,最后輸出結(jié)果
2、特別注意:被監(jiān)控的機(jī)器上需要支持snmp。yum install -y net-snmp*安裝
"""
#!/usr/bin/python
import re
import os
#get snmp-mib2 of the devices
def getallitems(host,oid):
sn1 =os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('\n')[:-1]
return sn1
#get network device
def getdevices(host):
device_mib = getallitems(host,'rfc1213-mib::ifdescr')
device_list = []
for item in device_mib:
ifre.search('eth',item):
device_list.append(item.split(':')[3].strip())
return device_list
#get network date
def getdate(host,oid):
date_mib = getallitems(host,oid)[1:]
date = []
for item in date_mib:
byte = float(item.split(':')[3].strip())
date.append(str(round(byte/1024,2)) + ' kb')
return date
if __name__ == '__main__':
hosts = ['192.168.10.1','192.168.10.2']
for host in hosts:
device_list = getdevices(host)
inside = getdate(host,'if-mib::ifinoctets')
outside = getdate(host,'if-mib::ifoutoctets')
print '==========' + host + '=========='
for i in range(len(inside)):
print '%s : rx: %-15s tx: %s ' % (device_list[i], inside[i], outside[i])
python監(jiān)控磁盤
1、實(shí)現(xiàn)原理:通過snmp協(xié)議獲取系統(tǒng)信息,再進(jìn)行相應(yīng)的計(jì)算和格式化,最后輸出結(jié)果
2、特別注意:被監(jiān)控的機(jī)器上需要支持snmp。yum install -y net-snmp*安裝
"""
#!/usr/bin/python
import re
import os
def getallitems(host,oid):
sn1 =os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('\n')[:-1]
return sn1
def getdate(source,newitem):
for item in source[5:]:
newitem.append(item.split(':')[3].strip())
return newitem
def getrealdate(item1,item2,listname):
for i in range(len(item1)):
listname.append(int(item1[i])*int(item2[i])/1024)
return listname
def caculatediskusedrate(host):
hrstoragedescr = getallitems(host, 'host-resources-mib::hrstoragedescr')
hrstorageused = getallitems(host, 'host-resources-mib::hrstorageused')
hrstoragesize = getallitems(host, 'host-resources-mib::hrstoragesize')
hrstorageallocationunits = getallitems(host, 'host-resources-mib::hrstorageallocationunits')
disk_list = []
hrsused = []
hrsize = []
hrsaunits = []
#get disk_list
for item in hrstoragedescr:
if re.search('/',item):
disk_list.append(item.split(':')[3])
#print disk_list
getdate(hrstorageused,hrsused)
getdate(hrstoragesize,hrsize)
#print getdate(hrstorageallocationunits,hrsaunits)
#get hrstorageallocationunits
for item in hrstorageallocationunits[5:]:
hrsaunits.append(item.split(':')[3].strip().split(' ')[0])
#caculate the result
#disk_used = hrstorageused * hrstorageallocationunits /1024 (kb)
disk_used = []
total_size = []
disk_used = getrealdate(hrsused,hrsaunits,disk_used)
total_size = getrealdate(hrsize,hrsaunits,total_size)
diskused_rate = []
for i in range(len(disk_used)):
diskused_rate.append(str(round((float(disk_used[i])/float(total_size[i])*100), 2)) + '%')
return diskused_rate,disk_list
if __name__ == '__main__':
hosts = ['192.168.10.1','192.168.10.2']
for host in hosts:
result = caculatediskusedrate(host)
diskused_rate = result[0]
partition = result[1]
print "==========",host,'=========='
for i in range(len(diskused_rate)):
print '%-20s used: %s' % (partition[i],diskused_rate[i])
python監(jiān)控內(nèi)存(swap)的使用率
1、實(shí)現(xiàn)原理:通過snmp協(xié)議獲取系統(tǒng)信息,再進(jìn)行相應(yīng)的計(jì)算和格式化,最后輸出結(jié)果
2、特別注意:被監(jiān)控的機(jī)器上需要支持snmp。yum install -y net-snmp*安裝
'''
#!/usr/bin/python
import os
def getallitems(host, oid):
sn1 =os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('\n')[:-1]
return sn1
def getswaptotal(host):
swap_total = getallitems(host, 'ucd-snmp-mib::memtotalswap.0')[0].split(' ')[3]
return swap_total
def getswapused(host):
swap_avail = getallitems(host, 'ucd-snmp-mib::memavailswap.0')[0].split(' ')[3]
swap_total = getswaptotal(host)
swap_used =str(round(((float(swap_total)-float(swap_avail))/float(swap_total))*100 ,2)) + '%'
return swap_used
def getmemtotal(host):
mem_total = getallitems(host, 'ucd-snmp-mib::memtotalreal.0')[0].split(' ')[3]
return mem_total
def getmemused(host):
mem_total = getmemtotal(host)
mem_avail = getallitems(host, 'ucd-snmp-mib::memavailreal.0')[0].split(' ')[3]
mem_used =str(round(((float(mem_total)-float(mem_avail))/float(mem_total))*100 ,2)) + '%'
return mem_used
if __name__ == '__main__':
hosts = ['192.168.10.1','192.168.10.2']
print "monitoring memory usage"
for host in hosts:
mem_used = getmemused(host)
swap_used = getswapused(host)
print '==========' + host + '=========='
print 'mem_used = %-15s swap_used = %-15s' % (mem_used, swap_used)
python運(yùn)維腳本 生成隨機(jī)密碼
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#using gpl v2.7
#author: http://m.emrowgh.com
import random, string #導(dǎo)入random和string模塊
def genpassword(length):
#隨機(jī)出數(shù)字的個(gè)數(shù)
numofnum = random.randint(1,length-1)
numofletter = length - numofnum
#選中numofnum個(gè)數(shù)字
slcnum = [random.choice(string.digits) for i in range(numofnum)]
#選中numofletter個(gè)字母
slcletter = [random.choice(string.ascii_letters) for i in range(numofletter)]
#打亂組合
slcchar = slcnum + slcletter
random.shuffle(slcchar)
#生成隨機(jī)密碼
getpwd = ''.join([i for i in slcchar])
return getpwd
if __name__ == '__main__':
print genpassword(6)
#!/usr/bin/env python
import random
import string
import sys
similar_char = '0ooii1lpp'
upper = ''.join(set(string.uppercase) - set(similar_char))
lower = ''.join(set(string.lowercase) - set(similar_char))
symbols = '!#$%&\*+,-./:;=?@^_`~'
numbers = '123456789'
group = (upper, lower, symbols, numbers)
def getpass(lenth=8):
pw = [random.choice(i) for i in group]
con = ''.join(group)
for i in range(lenth-len(pw)):
pw.append(random.choice(con))
random.shuffle(pw)
return ''.join(pw)
genpass = getpass(int(sys.argv[1]))
print genpass
#!/usr/bin/env python
import random
import string
def genpassword(length):
chars=string.ascii_letters+string.digits
return ''.join([random.choice(chars) for i in range(length)])
if __name__=="__main__":
for i in range(10):
print genpassword(15)
#-*- coding:utf-8 -*-
'''
簡(jiǎn)短地生成隨機(jī)密碼,包括大小寫字母、數(shù)字,可以指定密碼長(zhǎng)度
'''
#生成隨機(jī)密碼
from random import choice
import string
#python3中為string.ascii_letters,而python2下則可以使用string.letters和string.ascii_letters
def genpassword(length=8,chars=string.ascii_letters+string.digits):
return ''.join([choice(chars) for i in range(length)])
if __name__=="__main__":
#生成10個(gè)隨機(jī)密碼
for i in range(10):
#密碼的長(zhǎng)度為8
print(genpassword(8))
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#導(dǎo)入random和string模塊
import random, string
def genpassword(length):
#隨機(jī)出數(shù)字的個(gè)數(shù)
numofnum =random.randint(1,length-1)
numofletter = length - numofnum
#選中numofnum個(gè)數(shù)字
slcnum = [random.choice(string.digits) for i in range(numofnum)]
#選中numofletter個(gè)字母
slcletter = [random.choice(string.ascii_letters) for i in range(numofletter)]
#打亂這個(gè)組合
slcchar = slcnum + slcletter
random.shuffle(slcchar)
#生成密碼
genpwd = ''.join([i for i in slcchar])
return genpwd
if __name__ == '__main__':
print genpassword(6)
利用random生成6位數(shù)字加字母隨機(jī)驗(yàn)證碼
import random
li = []
for i in range(6):
r = random.randrange(0, 5)
if r == 2 or r == 4:
num = random.randrange(0, 9)
li.append(str(num))
else:
temp = random.randrange(65, 91)
c = chr(temp)
li.append(c)
result = "".join(li) # 使用join時(shí)元素必須是字符串
print(result)
輸出
335hqs
vs6rn5
...
random.random()用于生成一個(gè)指定范圍內(nèi)的隨機(jī)符點(diǎn)數(shù),兩個(gè)參數(shù)其中一個(gè)是上限,一個(gè)是下限。如果a > b,則生成隨機(jī)數(shù)
n: a <= n <= b。如果 a <b, 則 b <= n <= a。
print random.uniform(10, 20)
print random.uniform(20, 10)
#----
#18.7356606526
#12.5798298022
random.randint 用于生成一個(gè)指定范圍內(nèi)的整數(shù)。其中參數(shù)a是下限,參數(shù)b是上限,python生成隨機(jī)數(shù)
print random.randint(12, 20) #生成的隨機(jī)數(shù)n: 12 <= n <= 20
print random.randint(20, 20) #結(jié)果永遠(yuǎn)是20
#print random.randint(20, 10) #該語句是錯(cuò)誤的。
下限必須小于上限。
random.randrange 從指定范圍內(nèi),按指定基數(shù)遞增的集合中
random.randrange的函數(shù)原型為:random.randrange([start], stop[, step]),從指定范圍內(nèi),按指定基數(shù)遞增的集合中 獲取一個(gè)隨機(jī)數(shù)。
如:
random.randrange(10, 100, 2),結(jié)果相當(dāng)于從[10, 12, 14, 16, ... 96, 98]序列中獲取一個(gè)隨機(jī)數(shù)。
random.randrange(10, 100, 2)在結(jié)果上與 random.choice(range(10, 100, 2) 等效。
隨機(jī)整數(shù):
>>> import random
>>> random.randint(0,99)
21
隨機(jī)選取0到100間的偶數(shù):
>>> import random
>>> random.randrange(0, 101, 2)
42
隨機(jī)浮點(diǎn)數(shù):
>>> import random
>>> random.random()
0.85415370477785668
>>>random.uniform(1, 10)
5.4221167969800881
隨機(jī)字符:
random.choice從序列中獲取一個(gè)隨機(jī)元素。
其函數(shù)原型為:random.choice(sequence)。參數(shù)sequence表示一個(gè)有序類型。
這里要說明 一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。
list, tuple, 字符串都屬于sequence。
print random.choice("學(xué)習(xí)python")
print random.choice(["jgood", "is", "a", "handsome", "boy"])
print random.choice(("tuple", "list", "dict"))
>>> import random
>>> random.choice('abcdefg&#%^*f')
'd'
多個(gè)字符中選取特定數(shù)量的字符:
random.sample的函數(shù)原型為:random.sample(sequence, k),從指定序列中隨機(jī)獲取指定長(zhǎng)度的片斷。
sample函數(shù)不會(huì)修改原有序列。
>>> import random
random.sample('abcdefghij',3)
['a', 'd', 'b']
多個(gè)字符中選取特定數(shù)量的字符組成新字符串:
>>> import random
>>> import string
>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
eplace(" ","")
'fih'
隨機(jī)選取字符串:
>>> import random
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
'lemon'
洗牌:
random.shuffle的函數(shù)原型為:random.shuffle(x[, random]),用于將一個(gè)列表中的元素打亂 .
>>> import random
>>> items = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(items)
>>> items
[3, 2, 5, 6, 4, 1]
1、random.random
random.random()用于生成一個(gè)0到1的隨機(jī)符點(diǎn)數(shù): 0 <= n < 1.0
2、random.uniform
random.uniform(a, b),用于生成一個(gè)指定范圍內(nèi)的隨機(jī)符點(diǎn)數(shù),
兩個(gè)參數(shù)其中一個(gè)是上限,一個(gè)是下限。
如果a < b,則生成的隨機(jī)數(shù)n: b>= n >= a。
如果 a >b,則生成的隨機(jī)數(shù)n: a>= n >= b。
print random.uniform(10, 20)
print random.uniform(20, 10)
# 14.73
# 18.579
3、random.randint
random.randint(a, b),用于生成一個(gè)指定范圍內(nèi)的整數(shù)。其中參數(shù)a是下限,參數(shù)b是上限,生成的隨機(jī)數(shù)n: a <= n <= b
print random.randint(1, 10)
4、random.randrange
random.randrange([start], stop[, step]),從指定范圍內(nèi),按指定基數(shù)遞增的集合中 獲取一個(gè)隨機(jī)數(shù)。
如:random.randrange(10, 100, 2),結(jié)果相當(dāng)于從[10, 12, 14, 16, ... 96, 98]序列中獲取一個(gè)隨機(jī)數(shù)。
5、random.choice
random.choice從序列中獲取一個(gè)隨機(jī)元素。其函數(shù)原型為:random.choice(sequence)。參數(shù)sequence表示一個(gè)有序類型。
這里要說明 一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬于sequence。
print random.choice("python")
print random.choice(["jgood", "is", "a", "handsome", "boy"])
print random.choice(("tuple", "list", "dict"))
6、random.shuffle
random.shuffle(x[, random]),用于將一個(gè)列表中的元素打亂。
如:
p = ["python", "is", "powerful", "si-mp-le", "and so on..."]
random.shuffle(p)
print p
# ['powerful', 'si-mp-le', 'is', 'python', 'and so on...']
7、random.sample
random.sample(sequence, k),從指定序列中隨機(jī)獲取指定長(zhǎng)度的片斷。sample函數(shù)不會(huì)修改原有序列。
例如:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12]
slice = random.sample(list, 6) # 從list中隨機(jī)獲取6個(gè)元素,作為一個(gè)片斷返回
print slice
print list # 原有序列并沒有改變
round取相鄰整數(shù)
print(round(1.4))
print(round(1.8))
輸出:
1
2
查看各個(gè)進(jìn)程讀寫的磁盤io
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import sys
import os
import time
import signal
import re
class diskio:
def __init__(self, pname=none, pid=none, reads=0, writes=0):
self.pname = pname
self.pid = pid
self.reads = 0
self.writes = 0
def main():
argc = len(sys.argv)
if argc != 1:
print "usage: please run this script like [./diskio.py]"
sys.exit(0)
if os.getuid() != 0:
print "error: this script must be run as root"
sys.exit(0)
signal.signal(signal.sigint, signal_handler)
os.system('echo 1 > /proc/sys/vm/block_dump')
print "task pid read write"
while true:
os.system('dmesg -c > /tmp/diskio.log')
l = []
f = open('/tmp/diskio.log', 'r')
line = f.readline()
while line:
m =re.match(\
'^(\s+)\((\d+)\): (read|write) block (\d+) on (\s+)', line)
if m != none:
if not l:
l.append(diskio(m.group(1), m.group(2)))
line = f.readline()
continue
found = false
for item in l:
if item.pid == m.group(2):
found = true
if m.group(3) == "read":
item.reads = item.reads + 1
elif m.group(3) == "write":
item.writes = item.writes + 1
if not found:
l.append(diskio(m.group(1), m.group(2)))
line = f.readline()
time.sl-ee-p(1)
for item in l:
print "%-10s %10s %10d %10d" % \
(item.pname, item.pid, item.reads, item.writes)
def signal_handler(signal, frame):
os.system('echo 0 > /proc/sys/vm/block_dump')
sys.exit(0)
if __name__=="__main__":
main()
python自動(dòng)化運(yùn)維之簡(jiǎn)易ssh自動(dòng)登錄
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
import sys
ssh = pexpect.spawn('ssh root@192.168.20.103 ')
fout = file('sshlog.txt', 'w')
ssh.logfile = fout
ssh.expect("root@192.168.20.103's password:")
ssh.sendline("yzg1314520")
ssh.expect('#')
ssh.sendline('ls /home')
ssh.expect('#')
python運(yùn)維-獲取當(dāng)前操作系統(tǒng)的各種信息
#通過python的psutil模塊,獲取當(dāng)前系統(tǒng)的各種信息(比如內(nèi)存,cpu,磁盤,登錄用戶等),并將信息進(jìn)行備份
# coding=utf-8
# 獲取系統(tǒng)基本信息
import sys
import psutil
import time
import os
#獲取當(dāng)前時(shí)間
time_str = time.strftime( "%y-%m-%d", time.localtime( ) )
file_name = "./" + time_str + ".log"
ifos.path.exists ( file_name ) == false :
os.mknod( file_name )
handle = open ( file_name , "w" )
else :
handle = open ( file_name , "a" )
#獲取命令行參數(shù)的個(gè)數(shù)
if len( sys.argv ) == 1 :
print_type = 1
else :
print_type = 2
def isset ( list_arr , name ) :
if name in list_arr :
return true
else :
return false
print_str = "";
#獲取系統(tǒng)內(nèi)存使用情況
if ( print_type == 1 ) or isset( sys.argv,"mem" ) :
memory_convent = 1024 * 1024
mem = psutil.virtual_memory()
print_str += " 內(nèi)存狀態(tài)如下:\n"
print_str = print_str + " 系統(tǒng)的內(nèi)存容量為: "+str( http://m.emrowgh.com( memory_convent ) ) + " mb\n"
print_str = print_str + " 系統(tǒng)的內(nèi)存以使用容量為: "+str( http://m.emrowgh.com( memory_convent ) ) + " mb\n"
print_str = print_str + " 系統(tǒng)可用的內(nèi)存容量為: "+str( http://m.emrowgh.com( memory_convent ) - http://m.emrowgh.com( 1024*1024 )) + "mb\n"
print_str = print_str + " 內(nèi)存的buffer容量為: "+str( http://m.emrowgh.com( memory_convent ) ) + " mb\n"
print_str = print_str + " 內(nèi)存的cache容量為:" +str( http://m.emrowgh.com( memory_convent ) ) + " mb\n"
#獲取cpu的相關(guān)信息
if ( print_type == 1 ) or isset( sys.argv,"cpu" ) :
print_str += " cpu狀態(tài)如下:\n"
cpu_status = psutil.cpu_times()
print_str = print_str + " user = " + str( cpu_http://m.emrowgh.comer ) + "\n"
print_str = print_str + " nice = " + str( cpu_status.nice ) + "\n"
print_str = print_str + " system = " + str( cpu_status.system ) + "\n"
print_str = print_str + " idle = " + str ( cpu_status.idle ) + "\n"
print_str = print_str + " iowait = " + str ( cpu_status.iowait ) + "\n"
print_str = print_str + " irq = " + str( cpu_status.irq ) + "\n"
print_str = print_str + " softirq = " + str ( cpu_status.softirq ) + "\n"
print_str = print_str + " steal = " + str ( cpu_status.steal ) + "\n"
print_str = print_str + " guest = " + str ( cpu_status.guest ) + "\n"
#查看硬盤基本信息
if ( print_type == 1 ) or isset ( sys.argv,"disk" ) :
print_str += " 硬盤信息如下:\n"
disk_status = psutil.disk_partitions()
for item in disk_status :
print_str = print_str + " "+ str( item ) + "\n"
#查看當(dāng)前登錄的用戶信息
if ( print_type == 1 ) or isset ( sys.argv,"user" ) :
print_str += " 登錄用戶信息如下:\n "
user_status = http://m.emrowgh.comers()
for item in user_status :
print_str = print_str + " "+ str( item ) + "\n"
print_str += "---------------------------------------------------------------\n"
print ( print_str )
handle.write( print_str )
handle.close()
python自動(dòng)化運(yùn)維學(xué)習(xí)筆記
psutil 跨平臺(tái)的ps查看工具
執(zhí)行pip install psutil 即可,或者編譯安裝都行。
# 輸出內(nèi)存使用情況(以字節(jié)為單位)
import psutil
mem = psutil.virtual_memory()
print mem.total,http://m.emrowgh.comed,mem
print psutil.swap_memory() # 輸出獲取swap分區(qū)信息
# 輸出cpu使用情況
cpu = psutil.cpu_stats()
http://m.emrowgh.comerrupts,cpu.ctx_switches
psutil.cpu_times(percpu=true) # 輸出每個(gè)核心的詳細(xì)cpu信息
psutil.cpu_times().user # 獲取cpu的單項(xiàng)數(shù)據(jù) [用戶態(tài)cpu的數(shù)據(jù)]
psutil.cpu_count() # 獲取cpu邏輯核心數(shù),默認(rèn)logical=true
psutil.cpu_count(logical=false) # 獲取cpu物理核心數(shù)
# 輸出磁盤信息
psutil.disk_partitions() # 列出全部的分區(qū)信息
psutil.disk_usage('/') # 顯示出指定的掛載點(diǎn)情況【字節(jié)為單位】
psutil.disk_io_counters() # 磁盤總的io個(gè)數(shù)
psutil.disk_io_counters(perdisk=true) # 獲取單個(gè)分區(qū)io個(gè)數(shù)
# 輸出網(wǎng)卡信息
http://m.emrowgh.com_io_counter() 獲取網(wǎng)絡(luò)總的io,默認(rèn)參數(shù)pernic=false
http://m.emrowgh.com_io_counter(pernic=ture)獲取網(wǎng)絡(luò)各個(gè)網(wǎng)卡的io
# 獲取進(jìn)程信息
psutil.pids() # 列出所有進(jìn)程的pid號(hào)
p = psutil.process(2047)
p.name() 列出進(jìn)程名稱
p.exe() 列出進(jìn)程bin路徑
p.cwd() 列出進(jìn)程工作目錄的絕對(duì)路徑
p.status()進(jìn)程當(dāng)前狀態(tài)[sl-ee-p等狀態(tài)]
p.create_time() 進(jìn)程創(chuàng)建的時(shí)間 [時(shí)間戳格式]
p.uids()
p.gids()
p.cputimes() 【進(jìn)程的cpu時(shí)間,包括用戶態(tài)、內(nèi)核態(tài)】
p.cpu_affinity() # 顯示cpu親緣關(guān)系
p.memory_percent() 進(jìn)程內(nèi)存利用率
p.meminfo() 進(jìn)程的rss、vms信息
p.io_counters() 進(jìn)程io信息,包括讀寫io數(shù)及字節(jié)數(shù)
http://m.emrowgh.comnnections() 返回打開進(jìn)程socket的namedutples列表
p.num_threads() 進(jìn)程打開的線程數(shù)
#下面的例子中,popen類的作用是獲取用戶啟動(dòng)的應(yīng)用程序進(jìn)程信息,以便跟蹤程序進(jìn)程的執(zhí)行情況
import psutil
from subprocess import pipe
p =psutil.popen(["/usr/bin/python" ,"-c","print 'helloworld'"],stdout=pipe)
p.name()
http://m.emrowgh.comername()
http://m.emrowgh.commmunicate()
p.cpu_times()
# 其它
http://m.emrowgh.comers() # 顯示當(dāng)前登錄的用戶,和linux的who命令差不多
# 獲取開機(jī)時(shí)間
psutil.boot_time() 結(jié)果是個(gè)unix時(shí)間戳,下面我們來轉(zhuǎn)換它為標(biāo)準(zhǔn)時(shí)間格式,如下:
datetime.datetime.fromtimestamp(psutil.boot_time()) # 得出的結(jié)果不是str格式,繼續(xù)進(jìn)行轉(zhuǎn)換 datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%y-%m-%d%h:%m:%s')
【python運(yùn)維腳本實(shí)例】相關(guān)文章:
運(yùn)維述職報(bào)告02-08
運(yùn)維值班制度04-22
機(jī)房運(yùn)維總結(jié)03-24
運(yùn)維單位匯報(bào)材料09-22
it運(yùn)維崗位職責(zé)05-02
運(yùn)維工作計(jì)劃02-13
運(yùn)維部述職報(bào)告02-06
運(yùn)維工作總結(jié)02-05