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('结束')