zoukankan      html  css  js  c++  java
  • 模块

      模块名不要与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】.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】.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
  • 相关阅读:
    hdu 4465 概率称号
    Log4j配置文件位置+Spring数据源配置文件位置
    Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)
    过程 线 多线程 并发 同步异步
    django简单图表
    十年
    一起写2048(160行python代码)
    leetcode
    匹配算法重载方法
    串行卧重建10:小设计,而不是大布局
  • 原文地址:https://www.cnblogs.com/daisyyang/p/10774372.html
Copyright © 2011-2022 走看看