网页操作Linux磁盘/Python+Flask+bootstrap / api

基于python,使用网页对linux磁盘进行分区、新建文件类型、挂载等操作。

语言 python
框架 flask+bootstrap
数据接口 api

本章内容

通过SSH从远程主机上获取到linux磁盘信息,使用循环配合正则表达式,把从命令行获取的数据做成字典样子。

#!/usr/bin/python 
# coding:utf-8
# from _future_ import print_function
import pexpect
import re
import pprint


def login(user, passwd, ip, command): 

    child = pexpect.spawn('ssh  %s@%s "%s"' % (user, ip, command)) 
    o = '' 
    try: 
        i = child.expect(['[Pp]assword:', 'continue connecting (yes/no)?']) 
        if i == 0: 
            child.sendline(passwd) 
        elif i == 1: 
            child.sendline('yes') 
        else: 
            pass
    except pexpect.EOF: 
        child.close() 
    else: 
        o = child.read() 
        child.expect(pexpect.EOF) 
        child.close() 
    return o 


def data():  
    hosts = file('hosts2.list', 'r')
    for line in hosts.readlines(): 
        host = line.strip("\n") 
        if host: 
            ip, user, passwd, commands = host.split(":") 
        for command in commands.split(","): 
    #       print "+++++++++++++++ %s run:%s ++++++++++++" % (ip,command), 
            data = login(user, passwd, ip, command)
    return data
    hosts.close()
    
    
def datapc():
    datapc = data()
    # 正则表达式
    re_disk_device = r'(sd[a-z]{1,2}\b)'
    re_partition_no_fs = r'.*(sd\D{1,2}\d{1,2})'
    re_partition_fs_not_mount = r'.*(sd\D{1,2}\d{1,2}) (\S+).*[^/]'
    re_partition_fs_mounted = r'(sd\D{1,2}\d{1,2}) (\S+).* (/.*)'

    lst_line = datapc.split('\n')

    lstDisk = []
    dicDI = {}


    for line in lst_line:
    	
        re_disk_device_result = re.match(re_disk_device, line)
        re_partition_no_fs_result = re.match(re_partition_no_fs, line)
        re_partition_fs_not_mount_result = re.match(re_partition_fs_not_mount, line)
        re_partition_fs_mounted_result = re.match(re_partition_fs_mounted, line)
    
        if re_disk_device_result:
            disk_device = str(re_disk_device_result.group())
            lstDisk.append(disk_device)
            dicDI[disk_device] = []
            continue
        else:
            if re_partition_fs_mounted_result:
                lstPartion = re_partition_fs_mounted_result.groups()
                lstPartion = list(lstPartion)
                if lstDisk:
                    dicDI[lstDisk[-1]].append(list(lstPartion))
                continue
            elif re_partition_fs_not_mount_result:
                lstPartion = re_partition_fs_not_mount_result.groups()
                lstPartion = list(lstPartion)
                lstPartion.append('')
                lstPartion.append('1')
                if lstDisk:
                    dicDI[lstDisk[-1]].append(list(lstPartion))
                continue
            elif re_partition_no_fs_result:
                lstPartion = re_partition_no_fs_result.groups()
                lstPartion = list(lstPartion)
                lstPartion.append('')
                lstPartion.append('')
                lstPartion.append('2')
                if lstDisk:
                    dicDI[lstDisk[-1]].append(list(lstPartion))
                continue
    # print(lstDisk)
    pprint.pprint(dicDI)
    return dicDI

if __name__ == '__main__':
    datapc()
    pass

文件名 :hosts2.list
你想要连接远程主机的参数,自行填写

ip:用户名:用户密码:命令行命令

本章技术点:

  1. pexpect.spawn python交互模块,可在子命令函输入参数。
  2. 正则表达式处理数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值