python 運行nmon使用說明

來源:互聯網
上載者:User

標籤: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檔案檔案格式:

運行結果:

補充說明
使用者名稱需要有可執行許可權,否則失敗。

python 運行nmon使用說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.