黑马程序员技术交流社区
标题: python常用运维脚本实例,超实用! [打印本页]
作者: 熊帮君 时间: 2019-10-28 17:22
标题: python常用运维脚本实例,超实用!
[size=13.3333px]起始位置:0-文件头,默认值;1-当前位置;2-文件尾
[size=13.3333px]f.close() 关闭文件
[size=13.3333px]要进行读文件操作,只需要把模式换成'r'就可以,也可以把模式为空不写参数,也是读的意思,因为程序默认是为'r'的。
[size=13.3333px]>>>f = open('a.txt', 'r')
[size=13.3333px]>>>f.read(5)
[size=13.3333px]'hello'
[size=13.3333px]read( )是读文件的方法,括号内填入要读取的字符数,这里填写的字符数是5,如果填写的是1那么输出的就应该是‘h’。
[size=13.3333px]打开文件文件读取还有一些常用到的技巧方法,像下边这两种:
[size=13.3333px]1、read( ):表示读取全部内容
[size=13.3333px]2、readline( ):表示逐行读取
[size=13.3333px]一、用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]import os
[size=13.3333px]for root,dirs,files in os.walk('/tmp'):
[size=13.3333px] for name in files:
[size=13.3333px] print (os.path.join(root,name))
[size=13.3333px]os.walk()
[size=13.3333px]原型为:os.walk(top, topdown=True, onerror=None, followlinks=False)
[size=13.3333px]我们一般只使用第一个参数。(topdown指明遍历的顺序)
[size=13.3333px]该方法对于每个目录返回一个三元组,(dirpath, dirnames, filenames)。
[size=13.3333px]第一个是路径,第二个是路径下面的目录,第三个是路径下面的非目录(对于windows来说也就是文件)
[size=13.3333px]os.listdir(path)
[size=13.3333px]其参数含义如下。path 要获得内容目录的路径
[size=13.3333px]二、写程序打印三角形
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]input = int(raw_input('input number:'))
[size=13.3333px]for i in range(input):
[size=13.3333px] for j in range(i):
[size=13.3333px] print '*',
[size=13.3333px] print '\n'
[size=13.3333px]三、猜数器,程序随机生成一个个位数字,然后等待用户输入,输入数字和生成数字相同则视为成功。成功则打印三角形。失败则重新输入(提示:随机数函数:random)
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]import random
[size=13.3333px]while True:
[size=13.3333px] input = int(raw_input('input number:'))
[size=13.3333px] random_num = random.randint(1, 10)
[size=13.3333px] print input,random_num
[size=13.3333px] if input == random_num:
[size=13.3333px] for i in range(input):
[size=13.3333px] for j in range(i):
[size=13.3333px] print '*',
[size=13.3333px] print '\n'
[size=13.3333px] else:
[size=13.3333px] print 'please input number again'
[size=13.3333px]四、请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2013-09-23.log, 并且把磁盘的使用情况写到到这个文件中。
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]#!coding=utf-8
[size=13.3333px]import time
[size=13.3333px]import os
[size=13.3333px]new_time = time.strftime('%Y-%m-%d')
[size=13.3333px]disk_status = os.popen('df -h').readlines()
[size=13.3333px]str1 = ''.join(disk_status)
[size=13.3333px]f = file(new_time+'.log','w')
[size=13.3333px]f.write('%s' % str1)
[size=13.3333px]f.flush()
[size=13.3333px]f.close()
[size=13.3333px]五、统计出每个IP的访问量有多少?(从日志文件中查找)
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]#!coding=utf-8
[size=13.3333px]list = []
[size=13.3333px]f = file('/tmp/1.log')
[size=13.3333px]str1 = f.readlines()
[size=13.3333px]f.close()
[size=13.3333px]for i in str1:
[size=13.3333px] ip = i.split()[0]
[size=13.3333px] list.append(ip)
[size=13.3333px]list_num = set(list)
[size=13.3333px]for j in list_num:
[size=13.3333px] num = list.count(j)
[size=13.3333px] print '%s : %s' %(j,num)
[size=13.3333px]1. 写个程序,接受用户输入数字,并进行校验,非数字给出错误提示,然后重新等待用户输入。
[size=13.3333px]2. 根据用户输入数字,输出从0到该数字之间所有的素数。(只能被1和自身整除的数为素数)
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]#coding=utf-8
[size=13.3333px]import tab
[size=13.3333px]import sys
[size=13.3333px]while True:
[size=13.3333px] try:
[size=13.3333px] n = int(raw_input('请输入数字:').strip())
[size=13.3333px] for i in range(2, n + 1):
[size=13.3333px] for x in range(2, i):
[size=13.3333px] if i % x == 0:
[size=13.3333px] break
[size=13.3333px] else:
[size=13.3333px] print i
[size=13.3333px] except ValueError:
[size=13.3333px] print('你输入的不是数字,请重新输入:')
[size=13.3333px] except KeyboardInterrupt:
[size=13.3333px] sys.exit('\n')
[size=13.3333px]python练习 抓取web页面
[size=13.3333px]from urllib import urlretrieve
[size=13.3333px]def firstNonBlank(lines):
[size=13.3333px] for eachLine in lines:
[size=13.3333px] if not eachLine.strip():
[size=13.3333px] continue
[size=13.3333px] else:
[size=13.3333px] return eachLine
[size=13.3333px]def firstLast(webpage):
[size=13.3333px] f=open(webpage)
[size=13.3333px] lines=f.readlines()
[size=13.3333px] f.close
[size=13.3333px] print firstNonBlank(lines), #调用函数
[size=13.3333px] lines.reverse()
[size=13.3333px] print firstNonBlank(lines),
[size=13.3333px]def download(url= 'http://search.51job.com/jobsearch/advance_search.PHP',process=firstLast):
[size=13.3333px] try:
[size=13.3333px] retval = urlretrieve(url) [0]
[size=13.3333px] except IOError:
[size=13.3333px] retval = None
[size=13.3333px] if retval:
[size=13.3333px] process(retval)
[size=13.3333px]if __name__ == '__main__':
[size=13.3333px] download()
[size=13.3333px]Python中的sys.argv[]用法练习
[size=13.3333px]#!/usr/bin/python
[size=13.3333px]# -*- coding:utf-8 -*-
[size=13.3333px]import sys
[size=13.3333px]def readFile(filename):
[size=13.3333px] f = file(filename)
[size=13.3333px] while True:
[size=13.3333px] fileContext = f.readline()
[size=13.3333px] if len(fileContext) ==0:
[size=13.3333px] break;
[size=13.3333px] print fileContext
[size=13.3333px] f.close()
[size=13.3333px]if len(sys.argv) < 2:
[size=13.3333px] print "No function be setted."
[size=13.3333px] sys.exit()
[size=13.3333px]if sys.argv[1].startswith("-"):
[size=13.3333px] option = sys.argv[1][1:]
[size=13.3333px] if option == 'version':
[size=13.3333px] print "Version1.2"
[size=13.3333px] elif option == 'help':
[size=13.3333px] print "enter an filename to see the context of it!"
[size=13.3333px] else:
[size=13.3333px] print "Unknown function!"
[size=13.3333px] sys.exit()
[size=13.3333px]else:
[size=13.3333px] for filename in sys.argv[1:]:
[size=13.3333px] readFile(filename)
[size=13.3333px]python迭代查找目录下文件
[size=13.3333px]#两种方法
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]import os
[size=13.3333px]dir='/root/sh'
[size=13.3333px]'''
[size=13.3333px]def fr(dir):
[size=13.3333px] filelist=os.listdir(dir)
[size=13.3333px] for i in filelist:
[size=13.3333px] fullfile=os.path.join(dir,i)
[size=13.3333px] if not os.path.isdir(fullfile):
[size=13.3333px] if i == "1.txt":
[size=13.3333px] #print fullfile
[size=13.3333px] os.remove(fullfile)
[size=13.3333px] else:
[size=13.3333px] fr(fullfile)
[size=13.3333px]'''
[size=13.3333px]'''
[size=13.3333px]def fw()dir:
[size=13.3333px] for root,dirs,files in os.walk(dir):
[size=13.3333px] for f in files:
[size=13.3333px] if f == "1.txt":
[size=13.3333px] #os.remove(os.path.join(root,f))
[size=13.3333px] print os.path.join(root,f)
[size=13.3333px]'''
[size=13.3333px]一、ps 可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和。
[size=13.3333px](提示,使用ps aux 列出所有进程,过滤出RSS那列,然后求和)
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]#!coding=utf-8
[size=13.3333px]import os
[size=13.3333px]list = []
[size=13.3333px]sum = 0
[size=13.3333px]str1 = os.popen('ps aux','r').readlines()
[size=13.3333px]for i in str1:
[size=13.3333px] str2 = i.split()
[size=13.3333px] new_rss = str2[5]
[size=13.3333px] list.append(new_rss)
[size=13.3333px]for i in list[1:-1]:
[size=13.3333px] num = int(i)
[size=13.3333px] sum = sum + num
[size=13.3333px]print '%s:%s' %(list[0],sum)
[size=13.3333px]写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。
[size=13.3333px]#!/usr/bin/env python
[size=13.3333px]#!coding=utf-8
[size=13.3333px]import os
[size=13.3333px]import time
[size=13.3333px]import sys
[size=13.3333px]import smtplib
[size=13.3333px]from email.mime.text import MIMEText
[size=13.3333px]from email.MIMEMultipart import MIMEMultipart
[size=13.3333px]def sendsimplemail (warning):
[size=13.3333px] msg = MIMEText(warning)
[size=13.3333px] msg['Subject'] = 'python first mail'
[size=13.3333px] msg['From'] = 'root@localhost'
[size=13.3333px] try:
[size=13.3333px] smtp = smtplib.SMTP()
[size=13.3333px] smtp.connect(r'smtp.126.com')
[size=13.3333px] smtp.login('要发送的邮箱名', '密码')
[size=13.3333px] smtp.sendmail('要发送的邮箱名', ['要发送的邮箱名'], msg.as_string())
[size=13.3333px] smtp.close()
[size=13.3333px] except Exception, e:
[size=13.3333px] print e
[size=13.3333px]while True:
[size=13.3333px] http_status = os.popen('netstat -tulnp | grep httpd','r').readlines()
[size=13.3333px] try:
[size=13.3333px] if http_status == []:
[size=13.3333px] os.system('service httpd start')
[size=13.3333px] new_http_status = os.popen('netstat -tulnp | grep httpd','r').readlines()
[size=13.3333px] str1 = ''.join(new_http_status)
[size=13.3333px] is_80 = str1.split()[3].split(':')[-1]
[size=13.3333px] if is_80 != '80':
[size=13.3333px] print 'httpd 启动失败'
[size=13.3333px] else:
[size=13.3333px] print 'httpd 启动成功'
[size=13.3333px] sendsimplemail(warning = "This is a warning!!!")#调用函数
[size=13.3333px] else:
[size=13.3333px] print 'httpd正常'
[size=13.3333px] time.sleep(5)
[size=13.3333px] except KeyboardInterrupt:
[size=13.3333px] sys.exit('\n')
[size=13.3333px]#!/usr/bin/python
[size=13.3333px]#-*- coding:utf-8 -*-
[size=13.3333px]#输入这一条就可以在Python脚本里面使用汉语注释!此脚本可以直接复制使用;
[size=13.3333px]while True: #进入死循环
[size=13.3333px] input = raw_input('Please input your username:')
[size=13.3333px]#交互式输入用户信息,输入input信息;
[size=13.3333px] if input == "wenlong":
[size=13.3333px]#如果input等于wenlong则进入此循环(如果用户输入wenlong)
[size=13.3333px] password = raw_input('Please input your pass:')
[size=13.3333px]#交互式信息输入,输入password信息;
[size=13.3333px] p = '123'
[size=13.3333px]#设置变量P赋值为123
[size=13.3333px] while password != p:
[size=13.3333px]#如果输入的password 不等于p(123), 则进此入循环
[size=13.3333px] password = raw_input('Please input your pass again:')
[size=13.3333px]#交互式信息输入,输入password信息;
[size=13.3333px] if password == p:
[size=13.3333px]#如果password等于p(123),则进入此循环
[size=13.3333px] print 'welcome to select system!' #输出提示信息;
[size=13.3333px] while True:
[size=13.3333px]#进入循环;
[size=13.3333px] match = 0
[size=13.3333px]#设置变量match等于0;
[size=13.3333px] input = raw_input("Please input the name whom you want to search :")
[size=13.3333px]#交互式信息输入,输入input信息;
[size=13.3333px] while not input.strip():
[size=13.3333px]#判断input值是否为空,如果input输出为空,则进入循环;
[size=13.3333px] input = raw_input("Please input the name whom you want to search :")
[size=13.3333px]#交互式信息输入,输入input信息;
[size=13.3333px] name_file = file('search_name.txt')
[size=13.3333px]#设置变量name_file,file('search_name.txt')是调用名为search_name.txt的文档
[size=13.3333px] while True:
[size=13.3333px]#进入循环;
[size=13.3333px] line = name_file.readline() #以行的形式,读取search_name.txt文档信息;
[size=13.3333px] if len(line) == 0: #当len(name_file.readline() )为0时,表示读完了文件,len(name_file.readline() )为每一行的字符长度,空行的内容为\n也是有两个字符。len为0时进入循环;
[size=13.3333px] break #执行到这里跳出循环;
[size=13.3333px] if input in line: #如果输入的input信息可以匹配到文件的某一行,进入循环;
[size=13.3333px] print 'Match item: %s' %line #输出匹配到的行信息;
[size=13.3333px] match = 1 #给变量match赋值为1
[size=13.3333px] if match == 0 : #如果match等于0,则进入 ;
[size=13.3333px] print 'No match item found!' #输出提示信息;
[size=13.3333px] else: print "Sorry ,user %s not found " %input #如果输入的用户不是wenlong,则输出信息没有这个用户;
[size=13.3333px]#!/usr/bin/python
[size=13.3333px]while True:
[size=13.3333px] input = raw_input('Please input your username:')
[size=13.3333px] if input == "wenlong":
[size=13.3333px] password = raw_input('Please input your pass:')
[size=13.3333px] p = '123'
[size=13.3333px] while password != p:
[size=13.3333px] password = raw_input('Please input your pass again:')
[size=13.3333px] if password == p:
[size=13.3333px] print 'welcome to select system!'
[size=13.3333px] while True:
[size=13.3333px] match = 0
[size=13.3333px] input = raw_input("Please input the name whom you want to search :")
[size=13.3333px] while not input.strip():
[size=13.3333px] print 'No match item found!'
[size=13.3333px] input = raw_input("Please input the name whom you want to search :")
[size=13.3333px] name_file = file('search_name.txt')
[size=13.3333px] while True:
[size=13.3333px] line = name_file.readline()
[size=13.3333px] if len(line) == 0:
[size=13.3333px] break
[size=13.3333px] if input in line:
[size=13.3333px] print 'Match item: ' , line
[size=13.3333px] match = 1
[size=13.3333px] if match == 0 :
[size=13.3333px] print 'No match item found!'
[size=13.3333px] else: print "Sorry ,user %s not found " %input
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |