python远程安置和启动多服务器程序

import paramiko
import xlrd
import pexpect
import os

def read_Ipconf_data():
    '''
    从excel文件总取出需要的数据
    :param excel_path: excel文件路径
    :return: [[], [], []]
    '''
    excel_file = "Ip_conf.xlsx"
    excel_file = xlrd.open_workbook(excel_file)
    sheet = excel_file.sheet_by_index(0)
    rows, cols = sheet.nrows, sheet.ncols
    data = []
    for row in range(1,rows):
        if sheet.cell(row, 0).value:
            data.append(sheet.row_values(row))
    return data

def read_limit_num():
    '''
    从excel文件总取出需要的数据
    :param excel_path: excel文件路径
    :return: [[], [], []]
    '''
    excel_file = "limit_num.xlsx"
    excel_file = xlrd.open_workbook(excel_file)
    sheet = excel_file.sheet_by_index(0)
    rows, cols = sheet.nrows, sheet.ncols
    data = []
    for row in range(1,2):
        if sheet.cell(row, 0).value:
            data.append(sheet.row_values(row))
    temp = []
    for item in data[0]:
        temp.append(str(item))
    return temp


# 下载
def download(pkg_path ,local_path, data_source_user, data_source_pwd, data_source_ip):
    '''
    下载cpu_info_control.py
    :param pkg_path:
    :param local_path:
    :param data_source_ip:
    :param data_source_user:
    :return:
    '''
    print("download %s begin" % pkg_path)
    if os.path.exists(local_path):
        os.system("rm -rf " + local_path)
    if not os.path.exists(local_path):
        mkdir_cmd = 'mkdir ' + local_path
        os.system(mkdir_cmd)
        if not os.path.exists(local_path):
            raise FileExistsError("create " + local_path + "fail")
    download_process = pexpect.spawn(
        "scp -r {0}@{1}:{2} {3}".format(data_source_user, data_source_ip, pkg_path, local_path))
    download_process.expect(".* password:")
    download_process.sendline(data_source_pwd)
    download_process.interact()
    # scp [-r] user@ip:pkg_path local_path
     # 是否会覆盖
    print("download %s finished" % pkg_path)


# 上传
def upload(local_path, remote_path, local_pwd):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=item[0].strip(), port=int(item[3]), username=item[1].strip(), password=item[2].strip())
    stdin, stdout, stderr = ssh.exec_command("cd " + remote_path.split(":")[1])
    if not stderr.read():
        ssh.exec_command("mkdir -p " + remote_path.split(":")[1])
    ssh.close()
    upload_process = pexpect.spawn("scp -r {0} {1}".format(local_path, remote_path))
    upload_process.timeout = 5
    try:
        upload_process.expect("Are you sure you want to continue connecting (yes/no)?")
        upload_process.sendline("yes")
    except pexpect.exceptions.TIMEOUT:
        pass
    upload_process.expect(".* password:")
    upload_process.sendline(local_pwd)
    upload_process.interact()
    pass

if __name__ == '__main__':
    Iplist = read_Ipconf_data()
    Limit_num = read_limit_num()
    pkg_path ='cpu_info_control/cpu_info_control.py'
    local_path ='cpu_info_control/'
    data_source_user = 'xupeng'
    data_source_pwd  = 'xupeng'
    data_source_ip = '180.2.31.9'
    download(pkg_path, local_path, data_source_user, data_source_pwd, data_source_ip)
    for item in Iplist:
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(hostname=item[0].strip(), port=int(item[3]), username=item[1].strip(), password=item[2].strip())
            remote_path = 'chencx@180.2.31.9:cpu_info_control1/'
            upload(local_path, remote_path, local_pwd)
            shell = 'python3 cpu_info_control.py'+' '+Limit_num[0]+' '+Limit_num[1]+' '+Limit_num[2]+' '+Limit_num[3]
            stdin, stdout, stderr = ssh.exec_command(shell)
            # 获取命令结果
            #result = stdout.readline()
            #print(result)
            print('CPU内存控制程序启动成功,IP环境为', item[0].strip())
            # 关闭连接
            ssh.close()
            del ssh
        except Exception as e:
            print(e)
            print('CPU内存控制程序启动失败,IP环境为', item[0].strip())
    print('结束')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值