python模块
psutil资源监控模块
py文件名字不要跟导入的模块重名
py文件是可以当作模块导入的
psutil 是一个资源监控模块
import psutil #内存 mem = psutil.virtual_memory() print(mem) #cpu cpu = psutil.cpu_percent(1) print(cpu) #硬盘 disk = psutil.disk_usage(r'c:') print(disk)
os命令调用模块
os.system 利用python 帮我们调用系统命令
res返回 0 就等于命令执行成功,如果不为 0 执行结果失败
import os # os.system利用python帮我们调用系统命令 # res返回0就等于命令执行成功,如果不为0执行结果失败 cmds = ['service httpd restart','uname -r','update','ifconfig -a'] for cmd in cmds: res = os.system(cmd) if res == 0: print('执行成功') else: print('执行失败') # path.exists判断是否存在这个文件或者目录 res = os.path.exists(r'a.txt') if res: print('文件已存在') else: os.system('dir') # remove移除文件或目录 os.remove('a.txt') # rename重命名 os.rename('lock.txt', '250.txt') # path.join,拼接路径 HOME = '/etc/yum.repo.d/' res = os.path.join(HOME,'a.txt') print(res)
yagmail 电子邮件发送模块
python 标准库中发送电子邮件的模块比较复杂,因此,有许多开源的库提供了更加易用的接口来发送电子邮件,其中yagmail 是一个使用比较广泛的开源项目,yagmail 底层依然使用了smtplib 和 email 模块,但是 yagmail 提供了更好的接口,并具有更好的易读性
yagmail 是开源项目,因此,在使用前需要安装
pip install yagmail
#连接邮箱服务器 yag = yagmail.SMTP(user='xxx@163.com', password='xxxx', host='smtp.163.com') #发送邮件 yag.send(to='xxx@126.com', cc='xxx@163.com',subject='这是测试邮件', contents='这是测试邮件的内容') #断开连接 yag.close()
查看电脑运行状态并发送邮件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import yagmail import psutil def sendmail(subject,contents): #连接邮箱服务器 yag = yagmail.SMTP(user='1850****602@163.com',password='X****3456',host='smtp.163.com') #发送邮件 yag.send(to='1850****602@163.com',subject=subject, contents=contents) #断开连接 yag.close() def cpu_info(): cpu = psutil.cpu_percent(1) return cpu def mem_info(): mem = psutil.virtual_memory() total_mem = int(mem[0]/1024/1024) free_mem = int(mem[1]/1024/1024) percent_mem = mem[2] used_mem = int(mem[3]/1024/1024) mem_dict = { 'total_mem':total_mem, 'free_mem':free_mem, 'percent_mem':percent_mem, 'used_mem':used_mem } return mem_dict def disk_info(): disk = psutil.disk_usage(r'c:') total_disk = int(disk[0]/1024/1024/1024) used_disk = int(disk[1]/1024/1024/1024) free_disk = int(disk[2]/1024/1024/1024) percent_disk = disk[3] disk_dict = { 'total_disk':total_disk, 'used_disk':used_disk, 'free_disk':free_disk, 'percent_disk':percent_disk } return disk_dict def main(): cpu = cpu_info() mem = mem_info() disk = disk_info() msg = ''' cpu利用率:%s%% 内存总大小:%sM 内存剩余大小:%sM 内存使用率:%s%% 内存使用大小:%sM 硬盘总大小:%sG 硬盘使用大小:%sG 硬盘剩余大小:%sG 硬盘使用率:%s%% ''' % (cpu,mem.get('total_mem'),mem.get('free_mem'),mem.get('percent_mem'),mem.get('used_mem'),disk.get('total_disk'),disk.get('used_disk'),disk.get('free_disk'),disk.get('percent_disk')) if cpu > 1: print('cpu过高') sendmail('cpu正在燃烧',msg) else: print('cpu正常') if __name__ == '__main__': main()
ConfigParser模块
一、ConfigParser 简介
ConffigParser 使用来读取配置文件的包。配置文件的格式如下:
中括号"[]" 内包含为section 。 section 下面为类似key—value 的配置内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import configparser config = configparser.ConfigParser() config.read("mariadb.repo",encoding= 'gbk') # 添加section config.add_section('mysql') config.set('mysql','baseurl','http://www.mysql.com') config.remove_option('mysql','baseurl')#删除option ''' 查看是否有baseurl这个option res = config.has_option('mysql','baseurl') if res: print('已存在') else: config.set('mysql','baseurl','http://www.mysql.com') ''' config.remove_section('mysql')#删除section,如果有option一并删除 res = config.values() for i in res: print(i) ''' res = config.get('server','baseurl')#get通过section和option取value print(res) ''' config.write(open("mariadb.repo", "w"))#保存(必加)
paramiko 模块
模拟ssh 连接 linux 主机
import paramiko #模拟ssh链接linux主机 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='192.168.1.144',port=22,username='root',password='root') while True: stdin,stdout,stderr = ssh.exec_command(input('===>:').strip()) res = stdout.read().decode('utf-8')+stderr.read().decode('utf-8') print(res)
上传文件到 linux
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko # 通过paramiko 模块连接主机上传 hostname = '192.168.1.144' port = 22 username = 'root' password = 'root' t = paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) sftp.put(r'D:\11\untitled1\requestment.txt','/root/requestment.txt') sftp.close()
从linux 下载文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko # 通过paramiko 模块连接主机上传 hostname = '192.168.1.144' port = 22 username = 'root' password = 'root' t = paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/root/txt22',r'D:\11\untitled1\txt22.txt') sftp.close()
socket模块
利用socket模块监控端口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket socket.setdefaulttimeout(1) #设置超时时间 host_list = ['192.168.4.145:5555','192.168.4.146:555','192.168.4.147:5555','192.168.31.199:445'] for info in host_list: server = socket.socket() ip = re.compile('(.*?):(.*)').search(info).group(1) # .*? 叫做非贪婪匹配,尽可能的少匹配 port = re.compile('(.*?):(.*)').search(info).group(2) # .* 叫做谈论匹配,进可能的多匹配 res = server.connect_ex((ip, int(port))) if res == 0: # res == 0 代表端口号启用 res != 0 代表端口号没启用 print('%s--%s端口正常' % (ip, port)) else: print('%s--%s端口异常' % (ip, port))