整合python目录的代码

This commit is contained in:
ranchuan
2023-09-15 10:53:44 +08:00
parent 58b751d519
commit 8a14e74500
25 changed files with 4746 additions and 9 deletions

307
updata/ftp.py Normal file
View File

@@ -0,0 +1,307 @@
import paramiko
from ftplib import FTP
import os
import threading
import udp
import sys
import time
import stat
from PyQt5.QtCore import *
STR_RED="\033[1;31m"
STR_BLUE="\033[1;34m"
STR_END="\033[0m"
# 获得文件绝对路径
def getpath():
path=os.path.abspath(sys.argv[0])
list_str=path.split("\\")
return path.replace(list_str[-1],"")
class myftp(QObject):
local_path=getpath()+'file'
# print(local_path)
remot_path='/home/root'
# 进度信号ip1~100
rate_signal =pyqtSignal([str,int])
# 结束信号ip成败描述
end_signal = pyqtSignal([str,bool,str])
def __init__(self,ip,user,password):
QObject.__init__(self)
self.ip=ip
self.ssh = paramiko.SSHClient()
# 加入受信主机列表
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(ip, 22, user, password,timeout=10)
# 实例化一个 sftp对象,指定连接的通道
self.sftp=self.ssh.open_sftp()
self.invoke = self.ssh.invoke_shell()
def send_cmd(self,cmd,inputs=[],sleep_s=0.5):
# print("send cmd:",cmd)
console=""
input_list=[]
input_list=inputs.copy()
self.invoke.send(cmd+'\n') # \n很重要相当于回车
time.sleep(sleep_s)
while True:
out=self.invoke.recv(9999).decode("utf-8") # 提取数据然后解码
if(len(out)>0):
# print(out)
console+=out
else:
break
if(len(input_list)>0):
send_str=input_list.pop(0)
# print(self.ip,"|"+send_str)
self.invoke.send(send_str+'\n')
time.sleep(0.5)
else:
break
console='\n'+console
console=console.replace('\n','\n\t|')
print(self.ip,console)
# print("send cmd end")
def get_file(self,path,src_list):
lo_path=self.local_path+"\\"
if(len(path)>0):
lo_path=lo_path+path+"\\"
if not os.path.exists(lo_path):
os.makedirs(lo_path)
for i in src_list:
file_name=i.split('/')
try:
# print(file_name[-1])
if(len(file_name[-1])>0):
self.sftp.get(remotepath=i, localpath=lo_path+file_name[-1])
else:
file_list=self.scan_dir(i)
# self.sftp.get(remotepath=i, localpath=lo_path[0:-1])
self.get_file(path,file_list)
except Exception as r:
print(lo_path,"|"+str(r))
print(STR_RED,lo_path,"|get ",i,"failed.",STR_END)
return
print(STR_BLUE,lo_path,"|get ",i,"success.",STR_END)
def scan_dir(self,remotdir):
# list=self.sftp.listdir(remotdir)
attrs=self.sftp.listdir_attr(remotdir)
file_list=[]
for attr in attrs:
if not stat.S_ISDIR(attr.st_mode):
file_list.append(remotdir+attr.filename)
# print(file_list)
return file_list
# 关闭连接
def close(self):
self.ssh.close()
def put_cb(self,sent:int,all:int):
# (sended*100/data.size()+((index-1)*100))/get_addrs().size()
self.put_rate=sent*100//all
rate=(self.put_rate+(self.index)*100)//self.len_files
self.rate_signal.emit(self.ip,rate)
# print("sent={d1},all={d2}".format(d1=sent,d2=all))
# print("rate=",rate)
# 添加进度和结束信号供qt显示
def put_file(self,prefix,dst_list,src_list):
if not os.path.exists(self.local_path):
self.end_signal.emit(self.ip,False,"local path is not exists.")
return
self.len_files=len(dst_list)
self.index=0
for i in dst_list:
self.put_rate=0
file_name=i.split('/')
temp_path=self.remot_path+'/'+file_name[-1]
src_path=""
if(len(src_list)==0):
src_path=self.local_path+'\\'+file_name[-1]
else:
src_path=src_list[self.index]
if os.path.exists(src_path):
self.send_cmd("rm "+i)
# self.sftp.chmod(i.replace(file_name[-1],""),777)
self.send_cmd("chmod "+"777 "+i.replace(file_name[-1],""))
try:
self.sftp.put(localpath=src_path, remotepath=i,callback=self.put_cb)
except Exception as r:
print(prefix,"|"+str(r))
print(STR_RED,prefix,"|put ",i,"failed.",STR_END)
self.end_signal.emit(self.ip,False,str(r)+"|"+i)
return
self.index+=1
print(STR_BLUE,prefix,"|put ",i,"success.",STR_END)
# self.sftp.chmod(i,777)
self.send_cmd("chmod "+"777 "+i)
# self.rate_signal.emit(self.ip,self.index*100//self.len_files)
else:
print(STR_RED,prefix,"|file:"+src_path +" not exist.",STR_END)
self.end_signal.emit(self.ip,False,"file:"+src_path +" not exist.")
return
self.end_signal.emit(self.ip,True,"success")
# 从虚拟机下载文件
def load_file(ip,src_list):
print("load file from:",ip)
# ftp=myftp(ip,"andy","123456")
ftp=myftp(ip,"bitman","123456")
ftp.get_file("",src_list)
ftp.close()
print("load file end.")
# 保存文件到开发板
def save_file(ip,restart:bool,dst_list,src_list):
try:
ftp=myftp(ip,"root","")
if(restart==True):
print(ip,"|stop app.")
ftp.send_cmd("systemctl stop atk-qtapp-start.service")
ftp.put_file(ip,dst_list,src_list)
if(restart==True):
print(ip,"|start app.")
ftp.send_cmd("systemctl restart atk-qtapp-start.service")
ftp.send_cmd("sync")
ftp.close()
# print(ip,"|save file end.")
except Exception as r:
print(STR_RED,ip,"|"+str(r),STR_END)
# 从开发板加载文件
def get_file(ip,path,get_list):
# print("load file from:",ip)
ftp=myftp(ip,"root","")
ftp.get_file(path,get_list)
ftp.close()
# print("load file end.")
def send_cmd(ip,cmd_list):
ftp=myftp(ip,"root","")
for i in cmd_list:
ftp.send_cmd(i[0],i[1])
ftp.close()
# 定义要从虚拟机下载的文件
src_list=[]
# src_list.append("/home/bitman/linux/nfs/stm32mp157d-atk.dtb")
# src_list.append("/home/bitman/linux/nfs/QDesktop-fb")
# src_list.append("/home/bitman/QtWorkSpace/tcp_tr_can/checker_ye_cfg08.json")
src_list.append("/home/bitman/linux/nfs/")
# 定义要保存到开发板的文件
dst_list=[]
# 第一次拷贝设备树会因为权限问题不能运行
# dst_list.append("/run/media/mmcblk2p2/stm32mp157d-atk.dtb")
# dst_list.append("/usr/local/QDesktop-fb")
# dst_list.append("/home/root/config/checker_app_pre.sh")
# dst_list.append("/home/root/config/cfg.json")
# dst_list.append("/home/root/config/checker_ye_cfg11.json")
dst_list.append("/home/root/config/judge.lua")
# dst_list.append("/home/root/config/JQChecker_0008.bin")
# 定义要从开发板获取的文件
get_list=[]
# get_list.append("/home/root/comm_log/comm_log.csv")
# get_list.append("/home/root/log/debug_log.txt")
# get_list.append("/home/root/config/checker_app_pre.sh")
# get_list.append("/home/root/config/cfg.json")
# get_list.append("/home/root/config/judge.lua")
get_list.append("/home/root/comm_log/")
# 定义命令
cmd_list=[]
# cmd_list.append(("/usr/sbin/useradd -d / -g wheel andy",[]))
# cmd_list.append(("passwd andy",["123456","123456"]))
cmd_list.append(("rm ~/config/checker_app_pre.sh",[]))
# cmd_list.append(("ls ~/config/",[]))
# cmd_list.append(("ls /usr/local/",[]))
# 自动扫描从机地址,然后升级文件
# python .\ftp.py get 从开发板下载文件
# python .\ftp.py save 保存文件到开发板
# python .\ftp.py cmd 发送命令列表
def run():
if(len(sys.argv)<2):
print("argv too less")
return
print(sys.argv[0])
cmd=sys.argv[1]
ip_list=[]
u=udp.myudp(1,255)
u.find("192.168.80")
ip_list=u.dst_ip_list
if(len(ip_list)==0):
# ip_list.append(("192.168.80.120","local_id_1"))
ip_list.append(("192.168.80.81","local_id_1"))
ip_list.append(("192.168.80.82","local_id_2"))
ip_list.append(("192.168.80.83","local_id_3"))
ip_list.append(("192.168.80.84","local_id_4"))
ip_list.append(("192.168.80.85","local_id_5"))
ip_list.append(("192.168.80.86","local_id_6"))
ip_list.append(("192.168.80.87","local_id_7"))
ip_list.append(("192.168.80.88","local_id_8"))
print("find ip_list as:")
print(ip_list)
threads = []
if(cmd=="save"):
# load_file("192.168.80.188",src_list)
print('put file to ip_list.')
for i in ip_list:
t = threading.Thread(target=save_file, args=(i[0],True,dst_list ))
threads.append(t)
t.start()
elif(cmd=="get"):
print("get file from ip_list.")
for i in ip_list:
t = threading.Thread(target=get_file, args=(i[0],i[1],get_list ))
threads.append(t)
t.start()
elif(cmd=="cmd"):
print("send cmd to ip_list")
for i in ip_list:
t = threading.Thread(target=send_cmd, args=(i[0],cmd_list ))
threads.append(t)
t.start()
elif(cmd=="load"):
load_file("192.168.80.188",src_list)
#等待所有线程任务结束。
for t in threads:
t.join()
print("all task were end.")
if __name__ == "__main__":
run()