千家信息网

python 运行nmon使用说明

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,python 运行nmon使用说明第一步:安装:paramikowindow安装方法:pip install paramiko参考:http://www.jb51.net/article/97655.
千家信息网最后更新 2025年12月02日python 运行nmon使用说明

python 运行nmon使用说明

第一步:
安装:paramiko
window安装方法:pip install paramiko

参考:http://www.jb51.net/article/97655.htm
第二步:
以下代码包含发送命令与下载单个文件与目录文件下的所有;
缺点是没有写出多进程方式执行;
#coding=utf-8
import paramiko,time,threading
import os, sys,shutil
from stat import *

def get_year_mon_day_hour_min_sec():
time_array = time.localtime()
result= "%s:%s:%s:%s:%s:%s" %(time_array.tm_year,time_array.tm_mon,time_array.tm_mday,time_array.tm_hour,time_array.tm_min,time_array.tm_sec)
return result

def get_year_mon_day():
time_array = time.localtime()
result= u"%s年 %s月%s日" %(time_array.tm_year,time_array.tm_mon,time_array.tm_mday)
return result

def get_hour_min_sec():
time_array = time.localtime()
result= u"%s : %s : %s " %(time_array.tm_hour,time_array.tm_min,time_array.tm_sec)
return result

def get_y_m_d_h_ms():
import datetime
result = datetime.datetime.now().strftime("%Y
%m%d%H%M%S_")
return result

定义一个类,表示一台远端linux主机

class Linux(object):

通过IP, 用户名,密码,超时时间初始化一个远程Linux主机

def __init__(self, ip, username, password, port=22,timeout=30):    self.ip = ip    self.username = username    self.password = password    self.port = port    self.timeout = timeout    # transport和chanel    self.t = ''    self.chan = ''    # 链接失败的重试次数    self.try_times = 3# 调用该方法连接远程主机def connect(self):    transport = paramiko.Transport((self.ip, self.port))    transport.connect(username=self.username, password=self.password)    self.__transport = transport# 断开连接def close(self):    self.__transport.close()# 发送要执行的命令def send(self, command):    self.connect()    ssh = paramiko.SSHClient()    ssh._transport = self.__transport    # 执行命令    stdin, stdout, stderr = ssh.exec_command(command)    # 获取命令结果    result = stdout.read()    print result    self.close()# get单个文件def sftp_get(self, remotefile, localfile):    t = paramiko.Transport(sock=(self.ip, self.port))    t.connect(username=self.username, password=self.password)    sftp = paramiko.SFTPClient.from_transport(t)    sftp.get(remotefile, localfile)    print '下载完成'    t.close()# put单个文件def sftp_put(self, localfile, remotefile):    t = paramiko.Transport(sock=(self.ip, self.port))    t.connect(username=self.username, password=self.password)    sftp = paramiko.SFTPClient.from_transport(t)    sftp.put(localfile, remotefile)    print "上传成功"    t.close()# ------获取远端linux主机上指定目录及其子目录下的所有文件------def __get_all_files_in_remote_dir(self, sftp, remote_dir):    # 保存所有文件的列表    all_files = list()    # 去掉路径字符串最后的字符'/',如果有的话    if remote_dir[-1] == '/':        remote_dir = remote_dir[0:-1]    # 获取当前指定目录下的所有目录及文件,包含属性值    files = sftp.listdir_attr(remote_dir)    for x in files:        # remote_dir目录中每一个文件或目录的完整路径        filename = remote_dir + '/' + x.filename        # 如果是目录,则递归处理该目录,这里用到了stat库中的S_ISDIR方法,与linux中的宏的名字完全一致        if S_ISDIR(x.st_mode):            all_files.extend(self.__get_all_files_in_remote_dir(sftp, filename))        else:            all_files.append(filename)    return all_files# ------获取本地指定目录及其子目录下的所有文件------def __get_all_files_in_local_dir(self, local_dir):    # 保存所有文件的列表    all_files = list()    # 获取当前指定目录下的所有目录及文件,包含属性值    files = os.listdir(local_dir)    for x in files:        # local_dir目录中每一个文件或目录的完整路径        filename = os.path.join(local_dir, x)        # 如果是目录,则递归处理该目录        if os.path.isdir(x):            all_files.extend(self.__get_all_files_in_local_dir(filename))        else:            all_files.append(filename)    return all_files#获取本地指定目录及其子目录下的所有文件def sftp_put_dir(self, local_dir, remote_dir):    t = paramiko.Transport(sock=(self.ip, self.port))    t.connect(username=self.username, password=self.password)    sftp = paramiko.SFTPClient.from_transport(t)    # 去掉路径字符穿最后的字符'/',如果有的话    if remote_dir[-1] == '/':        remote_dir = remote_dir[0:-1]    # 获取本地指定目录及其子目录下的所有文件    all_files = self.__get_all_files_in_local_dir(local_dir)    # 依次put每一个文件    for x in all_files:        filename = os.path.split(x)[-1]        remote_filename = remote_dir + '/' + filename        print u'Put文件%s传输中...' % filename        sftp.put(x, remote_filename)# 获取远端linux主机上指定目录及其子目录下的所有文件def sftp_get_dir(self, remote_dir, local_dir):    t = paramiko.Transport(sock=(self.ip, self.port))    t.connect(username=self.username, password=self.password)    sftp = paramiko.SFTPClient.from_transport(t)    # 获取远端linux主机上指定目录及其子目录下的所有文件    all_files = self.__get_all_files_in_remote_dir(sftp, remote_dir)    # 依次get每一个文件    for x in all_files:        filename = x.split('/')[-1]        local_filename = os.path.join(local_dir, filename)        print u'Get文件%s传输中...' % filename        sftp.get(x, local_filename)#文件分离def copy_file(self, base_file_path):    file_list = os.listdir(base_file_path)    s = set()    for i in file_list:  # 取文件名中的年月日,存set去重        data = i.split('_')[:3]        d = ''        for j in data:            d = d + j + "_"        s.add(d)    base_path = os.path.dirname(base_file_path)  # 取基础文件的父目录    for i in s:        path = os.path.join(base_path, i)  # 拼路径(基础文件的父目录+以年月日命名的文件名)        if not os.path.exists(path):            os.mkdir(r'%s\%s' % (base_path, i))  # 新建文件,以年月日命名        for j in file_list:            if i in j:                new_path = os.path.join(path, j)                file_path = os.path.join(base_file_path, j)                shutil.copyfile(file_path, new_path)  # 复制文件    print('复制完成!!')

if name=='main':

try:    with open('ip.list', 'r') as file:        for line in file.readlines():            ip = str(line.split(':')[0])            host_address = ip.replace('.','_')            username = str(line.split(':')[1])            password = str(line.split(':')[2])            cmds = (line.split(':')[3:-1])            print "########"+ip+"######"+get_year_mon_day()+""+get_hour_min_sec()+"#####"            host = Linux(ip, username, password)            host.send("cd /home/nmon;./nmon -f -t -r -test_3_19 -s 5  -c 10 -F "+get_y_m_d_h_m_s()+""+host_address+".nmon  -m ../nmon_results;cd ../nmon_results;ls -l") #735            #删除            #host.send("cd sysinfo_nmon;rm -rf *;ls -l") #cd sysinfo_nmon;rm -rf *;ls -l            #host.sftp_get_dir(remote_path, local_path)            # 将远端的xxoo.txt get到本地,并保存为ooxx.txt            #host.sftp_get(remote_path, local_path)            #host.sftp_get_dir(remote_path, local_path)except:    print u"请查看数据是否下载完成!!"end_time = time.time()# 将本地的xxoo.txt put到远端,并保持为xxoo.txt# host.sftp_put(localfile, remotefile)# 将远端remote_path目录中的所有文件get到本地local_path目录# host.sftp_get_dir(remote_path, local_path)# 将本地local_path目录中的所有文件put到远端remote_path目录# host.sftp_put_dir(remote_path, local_path)

ip.list文件文件格式:

运行结果:

补充说明
用户名需要有可执行权限,否则失败。

0