东篱昏后

导航

 

  模块名不要与py文件重名;py文件可以作为模块导入。

一、paramiko

基于用户名和密码的sshclient方式登录

缺点:只能在绝对路径下执行命令,不能在当前目录下执行

import paramiko
ssh=paramiko.SSHClient()   #建立一个sshclient对象
#允许将信任的主机自动加入到host_allow列表;此方法必须加到connec方法前
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#调用connect方法连接服务器
ssh.connect(hostname='192.168.42.12',port=22,username='root',password='0330')
while True:
    stdin,stdout,stderr=ssh.exec_command(input('===>:').strip())
    res=stdout.read().decode('utf-8')+stderr.read().decode('utf-8')
    #拼接字符串,可以看到报错信息
    print(res)
    ssh.close()
View Code
import paramiko
#实例化一个transport对象
t=trans=paramiko.Transport(('192.168.42.12',22))  #一定是元组形式的变量
#建立连接
t.connect(username='root',password='0330')
#实例化一个sftp对象,指定连接的通道
sftp=paramiko.SFTPClient.from_transport(t)
#发送文件,不能直接上传到目录,可以改名
sftp.put(r'D:\pycharm】\b.txt','/root/a.txt')
#关闭
t.close()
传送sftp文件
import paramiko
#实例化一个transport对象
t=trans=paramiko.Transport(('192.168.42.12',22))  #一定是元组形式的变量
#建立连接
t.connect(username='root',password='0330')
#实例化一个sftp对象,指定连接的通道
sftp=paramiko.SFTPClient.from_transport(t)
#下载文件,不能直接上传到目录,可以改名
sftp.get('/root/a.txt',r'D:\pycharm】\b.txt')
#关闭
t.close()
下载sftp文件

 二、socket(效率高)

基于ip地址和端口号,实现收发消息,可以实现服务的监控

import socket
监控一个主机
sever=socket.socket()  #tcp协议
sever.settimeout(1) #设置超时时间,超过1秒就停止
res=sever.connect_ex(('127.0.0.1',8080))
print(res)  #res==0表示端口号启用,res!=0表示端口号没启用
监控一个主机
监控多个主机
import socket,re
hosts=['1.1.1.1:8080','2.2.2.2:8080','3.3.3.3:8080','127.0.0.1:8080','4.4.4.4:8080','5.5.5.5:8080']
for host in hosts:
    # compile编译
    # (.*?)非贪婪匹配,尽可能少的匹配
    # (.*)贪婪匹配,尽可能多的匹配
    # search方法表示去host里匹配
    # 正则匹配的是字符串
    ip = re.compile('(.*?):(.*)').search(host).group(1)
    port = re.compile('(.*?):(.*)').search(host).group(2)
    sever=socket.socket()
    sever.settimeout(1)
    res=sever.connect_ex((ip,int(port)))   #必须是元组形式
    if res == 0:
        print('%s----%s:ok' % (ip,port))
    else:
        print('%s----%s:不ok' % (
import psutil
import yagmail
def mail(subject,contents):
    # 连接邮件服务器
    yag=yagmail.SMTP(user='xxx@163.com',password='jam0330',host='smtp.163.com')
    #发送邮件
    yag.send(to='xxx@163.com',subject=subject,contents=contents)
    #关闭邮件
    yag.close()
    # 监控内存
def mem():
    mem = psutil.virtual_memory()
    mem_dict = {'mem_total':int(mem[0])/1024/1024,    #输出单位为
                'mem_free':int(mem[1])/1024/1024,
                'mem_percent':mem[2],
                'mem_used':int(mem[3])/1024/1024}
    return mem_dict
# 监控1秒内cpu的使用率
def cpu():
    cpu = psutil.cpu_percent(1)
    return cpu
# 监控硬盘
def disk():
    disk = psutil.disk_usage(r'c:')
    disk_dict = {'disk_total':int(disk[0])/1024/1024,
                 'disk_used':int(disk[1])/1024/1024,
                 'disk_free':int(disk[2])/1024/1024,
                 'disk_percent':disk[3]}
    return disk_dict
def main():
    a = mem()
    b = cpu()
    c =disk()
    mag = '''
            内存总大小:%sM
            内存剩余大小:%sM
            内存使用率:%s%%
            内存使用大小:%sM
            cpu使用率:%s%%
            硬盘总大小:%sM
            硬盘使用大小:%sM
            硬盘剩余大小:%sM
            硬盘使用率:%s%%
    ''' % (a['mem_total'],a['mem_free'],a['mem_percent'],a['mem_used'],b,
           c['disk_total'],c['disk_used'],c['disk_free'],c['disk_percent'])
    if a['mem_percent'] > 50:    #判断内存使用率是否超过50
        print('内存超过50%了,省着点用呐')
        mail('内存预警',mag)
    else:
        print('内存空间足足的')
    if b > 50:      #判断cpu是否超过50
        print('cpu超过50%了')
        mail('cpu预警',mag)
    else:
        print('cpu护你走天下')
    if c['disk_percent'] > 50:    #判断硬盘使用率是否超过50
        print('硬盘转疯了,快让他歇歇')
        mail('硬盘预警',mag)
    else:
        print('硬盘还有好久的寿命')
if __name__ == '__main__':
    main()
监控多个主机

三、re正则

# compile编译
    # (.*?)非贪婪匹配,尽可能少的匹配
    # (.*)贪婪匹配,尽可能多的匹配
    # search方法表示去host里匹配
    # 正则匹配的是字符串
    ip = re.compile('(.*?):(.*)').search(host).group(1)
    port = re.compile('(.*?):(.*)').search(host).group(2)
.*?

四、yagmail

提供端口发送电子邮件,具有更好的易读性

yagmail是开源项目,使用前需要安装

import yagmail
# 连接邮件服务器
yag=yagmail.SMTP(user='***@163.com',password='****',host='smtp.163.com')
#发送邮件
yag.send(to='***9@163.com',subject='subject',contents='contents')
#关闭邮件
yag.close()
View Code

五、psutil

import psutil
# 监控内存
mem = psutil.virtual_memory()
print(mem)
# 监控1秒内cpu的使用率
cpu = psutil.cpu_percent(1)
print(cpu)
# 监控硬盘
disk = psutil.disk_usage(r'c:')
print(disk)
监控内存,cpu,硬盘
# 持续监控内存,cpu,硬盘的使用情况
import psutil
import yagmail
def mail(subject,contents):
    # 连接邮件服务器
    yag=yagmail.SMTP(user='18335192869@163.com',password='jam0330',host='smtp.163.com')
    #发送邮件
    yag.send(to='18335192869@163.com',subject=subject,contents=contents)
    #关闭邮件
    yag.close()
    # 监控内存
def mem():
    mem = psutil.virtual_memory()
    mem_dict = {'mem_total':int(mem[0])/1024/1024,    #输出单位为
                'mem_free':int(mem[1])/1024/1024,
                'mem_percent':mem[2],
                'mem_used':int(mem[3])/1024/1024}
    return mem_dict
# 监控1秒内cpu的使用率
def cpu():
    cpu = psutil.cpu_percent(1)
    return cpu
# 监控硬盘
def disk():
    disk = psutil.disk_usage(r'c:')
    disk_dict = {'disk_total':int(disk[0])/1024/1024,
                 'disk_used':int(disk[1])/1024/1024,
                 'disk_free':int(disk[2])/1024/1024,
                 'disk_percent':disk[3]}
    return disk_dict
def main():
    a = mem()
    b = cpu()
    c =disk()
    mag = '''
            内存总大小:%sM
            内存剩余大小:%sM
            内存使用率:%s%%
            内存使用大小:%sM
            cpu使用率:%s%%
            硬盘总大小:%sM
            硬盘使用大小:%sM
            硬盘剩余大小:%sM
            硬盘使用率:%s%%
    ''' % (a['mem_total'],a['mem_free'],a['mem_percent'],a['mem_used'],b,
           c['disk_total'],c['disk_used'],c['disk_free'],c['disk_percent'])
    if a['mem_percent'] > 50:    #判断内存使用率是否超过50
        print('内存超过50%了,省着点用呐')
        mail('内存预警',mag)
    else:
        print('内存空间足足的')
    if b > 50:      #判断cpu是否超过50
        print('cpu超过50%了')
        mail('cpu预警',mag)
    else:
        print('cpu护你走天下')
    if c['disk_percent'] > 50:    #判断硬盘使用率是否超过50
        print('硬盘转疯了,快让他歇歇')
        mail('硬盘预警',mag)
    else:
        print('硬盘还有好久的寿命')
if __name__ == '__main__':
    main()
持续监控

六、os模块

import os

# 利用os.system调用系统命令
cmds = ['uname -r','update']
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')
    
# os.path.join拼接路径
path1='D:/python/'
path2='lion'
res1=os.path.join(path1,path2)
print(res1)

# os.remove删除文件
os.remove(r'a.txt')

# os.rename重命名
os.rename('a.txt','b.txt')
View Code

七、configparser模块

ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。
import configparser
# 实例化
config = configparser.ConfigParser()
config.read('mariadb.txt',encoding='utf-8')
# 获取section节点
res = config.sections()
print(res)
# 获取指定section中的option
res1=config.options('mysql')
print(res1)
# 获取section指定的option的值
config.get('mysql','baseurl')
# 获取section中所有的配置信息
config.items('mysql')
# 修改某个option值,不存在会创建
config.set('mysql','baseurl','url')
config.write('mariadb.txt','w')
# 检查section或option是否存在,返回bool值
config.has_section('mysql')
config.has_option('mysql','baseurl')
# 将section下的所有内容都删除
config.remove_section('mysql')
# 将内容写入文件中
config.write('mariadb.txt','w')
View Code

 

posted on 2019-04-30 09:19  东篱昏后  阅读(236)  评论(0编辑  收藏  举报