最近开始复习python的使用,把服务器运维常用的模块的用法进行了实例化概述。
==========sort========================= python 排序; ls=[1,31,13,141,41] ls.sort() print ls 元组sort: >>> lst=[('wyl',24),('hjj',25),('zs',22),('lisi',14)] >>> sorted(lst,key=lambda lst:lst[1],reverse=True) [('hjj', 25), ('wyl', 24), ('zs', 22), ('lisi', 14)] 字典排序: >>> print d {'a': 2, 'e': 221, 'd': 222, 'f': 22, 'age': 24, 'name': 'wyl'} >>> sorted(d.iteritems(),key= lambda d:d[1]) [('a', 2), ('f', 22), ('age', 24), ('e', 221), ('d', 222), ('name', 'wyl')] ==========paramiko========================= python ssh模块: import paramiko def ssh(host,cmd): #host = '192.168.0.213' user = 'root' s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) privatekeyfile = os.path.expanduser('~/.ssh/id_rsa') mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile) # mykey=paramiko.DSSKey.from_private_key_file(privatekeyfile,password='061128') s.connect(host,22,user,pkey=mykey,timeout=5) #cmd=raw_input('cwd:') #cmd="ip a | grep inet | grep 192.168 | grep brd | awk -F/22 '{print $1}'|awk '{print $2}'" stdin,stdout,stderr = s.exec_command(cmd) cmd_result = stdout.read(),stderr.read() for line in cmd_result: return line.strip("\n") s.close() print ssh("192.168.0.2",'ls /root') ==========multiprocessing============= import multiprocessing def bingfa(picmip): Srealmount=set(ssh(picmip,"mount|awk '$1~/192.168.0.7/{print $1}'").rstrip().split("\n")) #print Srealmount shortlist=list(Slocalmountls - Srealmount) for sl in shortlist: print "mount-error-"+sl + time.ctime() f=open('/share/yunwei/shell/mountip.txt') pool=multiprocessing.Pool(processes=4) for ips in f: pool.apply_async(bingfa,(ips,)) pool.close() pool.join() f.close() ========MySQLdb=============== python mysql模块: import MySQLdb def pyfmysql(*args): conn=MySQLdb.connect(host='10.0.0.24',user='root',passwd='xxxxx',db='mon',port=3306) cur=conn.cursor() conn.select_db('monitor') cur.execute("""insert into T_SYS_LOG (CONTENT,HOST_IP,MONITOR_TYPE,MONITOR_LEVEL,SMS_FLAG,GROUP_ID) values(%s,%s,%r,%r,%r,%r)""",args) #sqlcmd='insert into T_SYS_LOG(CONTENT, HOST_IP, MONITOR_TYPE, MONITOR_LEVEL, SMS_FLAG,GROUP_ID) values(%s,%s,%s,%d,%d,%d)' sqlresult = cur.fetchall() print sqlresult conn.commit() cur.close() conn.close() pyfmysql('test','127.0.0.1',1,2,0,6) ==========json============= import json newd={'four': '192.168.0.10', 'second': '192.168.0.5', 'third': '192.168.0.7', 'first': '192.168.0.2'} ojson=json.dumps(newd) file=open('/tmp/jsonfile','w') file.write(ojson) f= open(r'/tmp/jsonfile') jsonobj = json.load(f) oldd=eval(str(jsonobj)) f.close =========shutil================== import shutil shutil.copy("1","2") shutil.rmtree("42") =========cStringIO=============== import cStringIO 输入: s=cStringIO.StringIO() s.write("you are a girl") 输出: print s.getvalue() 或者 s.seek(0) print s.read() =============time================= import datetime passt = datetime.datetime.now() - datetime.timedelta(minutes=10) curtime2 = passt.strftime('%Y%m%d%H') ==============urllib================= import urllib ourl=urllib.urlopen('http://www.baidu.com') print ourl.info() for line in ourl: print line, ourl.close() import urllib print urllib.urlopen('http://www.google.com').read() ============urllib2================ #!/bin/env python import urllib2 # set up authentication info authinfo = urllib2.HTTPBasicAuthHandler() authinfo.add_password(realm='PDQ Application', uri='http://10.0.0.1:8091/index.html', user='admin', passwd='admin') #proxy_support = urllib2.ProxyHandler({"http" : "http://ahad-haam:3128"}) # build a new opener that adds authentication and caching FTP handlers opener = urllib2.build_opener(authinfo,urllib2.CacheFTPHandler) # install it urllib2.install_opener(opener) f = urllib2.urlopen('http://10.0.0.1:8091/index.html#sec=servers') text=f.read() print text #============get ip================ import subprocess cmd3=subprocess.Popen("hostname",shell=True,stdout=subprocess.PIPE) hostname=''.join(cmd3.stdout.readlines()).strip("\n") #============远程简单执行命令================ f=open('/tmp/host-user') for line in f: Lline=line.split(' ') ip=Lline[0] user=Lline[1].strip() # print ip,user cmd='userdel '+user+';rm -rf /home/'+user cmd2="sed -i /^"+user+".*/d /etc/sudoers" print ip,user ssh(ip,cmd) ssh(ip,cmd2) if p == 'webkitui.xxxx.com' or p == 'touch.xxx.com' or p == 'wap.xxx.com': print "======"+p+"=======" elif p == 'n.xxxx.com' or p == 'next.xxxxx.com': print "======"+p+"=======" errinfo="sh /share/yunwei/shell/commonapi/mms_api_01.sh %s-%r-respone-time-%.3fs %s 1 2 0 6" %(str(p.split('.')[0]),ip,float(ip_detail['rtime'])/ip_detail['spv'],hostname) os.popen(errinfo) errinfo="sh /share/yunwei/shell/commonapi/mms_apinew_01.sh %s-%r-respone-time-%.3fs %s 18 1 1" %(str(p.split('.')[0]),ip,float(ip_detail['rtime'])/ip_detail['spv'],hostname) os.popen(errinfo) ============python-redis================ >>> import redis >>> r = redis.StrictRedis(host='localhost', port=6379, db=0) >>> r.set('foo', 'bar') True >>> r.get('foo')' bar' ===========optparse==================== from optparse import OptionParser ''' def helpFunc(a,b,c,d): print "" print "modify_file.py -A|--add (ip --> hostname) -D|--del (ip --> hostname) -M|--modify (ip --> hostname)" print "..." sys.exit(3) parser = OptionParser(add_help_option=0) parser.add_option("-h", "--help", action="callback", callback=helpFunc) ''' def verFunc(a,b,c,d): print "Ver 0.0.1" sys.exit(3) parser = OptionParser() parser.add_option("-V", "--version", action="callback", callback=verFunc, help="show script version") #parser.add_option("-V", "--version",action="store_false",help="Ver 0.0.1") parser.add_option("-A", "--add", action="store", type="string", dest="add_record",help="add record to /etc/hosts file") parser.add_option("-D", "--del", action="store", type="string", dest="del_record",help="del record to /etc/hosts file") parser.add_option("-M", "--modify", action="store", type="string", dest="modify_record",help="modify record to /etc/hosts file") (options, args) = parser.parse_args(sys.argv) if options.add_record is not None: print options.add_record if options.del_record is not None: print options.del_record if options.modify_record is not None: print options.modify_record ============pexpect================= #!/bin/env python import pexpect #child=pexpect.spawn('ssh root@192.168.10.22') child=pexpect.spawn('ssh root@192.168.10.22 "ls -ldZ /root"') child.expect('.*password:') child.sendline('youyuan') #child.expect('.*#') #child.sendline('ls -ldZ /root') #child.sendline('exit') #print child.before #child.interact() fout = open('log.txt', "w") child.logfile = fout child.expect(pexpect.EOF) fout.close() ===========class==================== class test2: def __init__(self,name): self.Name=name def speak2(self): print "my name " + self.Name print test2('wangyl').speak2() ============python_post_token #######requests需要安装yum install python-requests #!/bin/env python #coding:utf8 import requests,json f=open('aaa100.txt','w') flist=[] url='http://abc.com/interface/apix.html' values={"token":"bfafag2","method":"getip"} r = requests.post(url, json=values) r.encoding='utf-8' print r.json() ####print json.dumps(r.json(),ensure_ascii=False) 这个是中文输出的 for list in eval(ojson)['data']: result=str(list['ip']+" "+list['usetype']+" "+list['cabinet']) flist.append(result) nline='\n'.join(flist).strip('\,') f.write(nline) 或者: f=open('aaa100.txt','w') flist=[] import subprocess curlcmd="""curl -H "Content-Type: application/json; charset=utf-8" -X POST http://aaa.com/interface/apix.html -d '{"token":"141jljljfa","method":"getip"}'""" cmd=subprocess.Popen(curlcmd,shell=True,stdout=subprocess.PIPE) res=''.join(cmd.stdout.readlines()).strip("\n") for list in eval(res)['data']: result=str(list['ip']+" "+list['usetype']+" "+list['cabinet']) flist.append(result) nline='\n'.join(flist).strip('\,') f.write(nline) f.close() ==========================getopt import sys,getopt def usage(): print("Usage:%s [-a ip|ip1,ip2,ip3...|-d ip|ip1,ip2,ip3...] [--help|--add|--del] args...." %sys.argv[0]); try: opts, args = getopt.getopt(sys.argv[1:], "ha:d:", ["help", "add=","del="]) for key, value in opts: if key in ("-h", "--help"): usage() sys.exit() elif key in ("-a", "--add"): ips = value elif key in ("-d", "--del"): ips = value else: assert False, "unhandled option" except getopt.GetoptError: usage() =======================帮助 def usage(): print 'Usage:\n' \ '[-h|--help] : Help info\n' \ '[-v] : Print detail info\n' \ '[-i|--ip]'+'\033[1;33;40m'+' <log_dir>'+'\033[0m'+' : Assign ip\n' \ '[-n|--noipfile]'+'\033[1;33;40m'+' <noipfile>'+'\033[0m'+' : Assign noipfile\n' \ '[-I|--ipfile]'+'\033[1;33;40m'+' <ipfile>'+'\033[0m'+' : Assign ipfile\n' =======================logging import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='/var/log/monitor_socket_status.log', filemode='w') logging.debug('Done!') logging.error(error) =======================email from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.utils import parseaddr,formataddr from email.header import Header from email import encoders def _format_addr(s): name, addr = parseaddr(s) return formataddr(( \ Header(name, 'utf-8').encode(), \ addr.encode('utf-8') if isinstance(addr, unicode) else addr)) def SendMail(content,mail_to): msg = MIMEMultipart() msg['To'] = mail_to from_addr='it@tech.xxx.com' msg['From'] = _format_addr(u'运维监控 <%s>' % (from_addr)) msg['Subject'] = u"支付日志异常报警" txt = MIMEText(content,_charset="utf-8") server = smtplib.SMTP() try: server.connect('smtp.exmail.qq.com') server.login('it@tech.xxxx.com','Lover2') msg.attach(txt) server.sendmail(msg['From'],msg['To'],msg.as_string()) server.quit() except Exception: error=traceback.format_exc() os.system('/bin/echo %s >> /tmp/send_mail_failed.txt'%(mail_to)) ========================= import linecache for line in linecache.getlines('/tmp/syscheck_server.log')[0:4]: print line print linecache.getline('/tmp/syscheck_server.log',2) linecache.clearcache()