基于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:用户名:用户密码:命令行命令
本章技术点:
- pexpect.spawn python交互模块,可在子命令函输入参数。
- 正则表达式处理数据