本工具是一开始使用做oss传输后因为不稳定直接改成传输到Linux服务器,在使用服务器传输到oss,如果有需要的部分可自行修改
# -*- coding: utf-8 -*-
import os
import paramiko
import tkinter as tk
from tkinter import filedialog
from tkinter import simpledialog
host=192.168.1.1
port=22
username=root
pwd=你的密码
class SSHConnection(object):
def __init__(self, host, port, username, pwd):
self.__transport = None
self.host = host
self.port = port
self.username = username
self.pwd = pwd
self.__k = None
def connect(self):
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.pwd)
self.__transport = transport
def close(self):
self.__transport.close()
def upload(self, local_path, target_path):
# 上传数据
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.put(local_path, target_path)
# def download(self, remote_path, local_path):
# # 下载数据
# sftp = paramiko.SFTPClient.from_transport(self.__transport)
# sftp.get(remote_path, local_path)
def cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 执行命令
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令结果
result = stdout.read()
print(str(result, encoding='utf-8'))
return result
if __name__ == '__main__':
ssh = SSHConnection(host=host, port=port, username=username, pwd=pwd)
ssh.connect()
root = tk.Tk()
root.withdraw()
filename = filedialog.askopenfilename()
res = simpledialog.askstring('标题', prompt='请输入要上传的版本号eg:v1.2.161', initialvalue='默认值')
if res is None:
print("请重新运行脚本,输入参数,本参数不做校验,输入错误请手工删除OSS上的资源")
os.system("pause")
exit(1)
asd = filename.split('/')[-1]
cmd = r'/data/oss/'
'''判断传输的目录是否存在文件,有则取消不运行该脚本'''
if asd == 'Android.zip':
filesize = ssh.cmd("ossutil64 du oss://test/test/test/{0}/Android/ |grep 'total du size(byte)'|cut -d ':' -f 2".format(res))
filesizeq = int(filesize)
print("filesizeq")
if filesizeq == 0:
print("恭喜你,通过校验,请输入回车继续执行上传动作")
os.system("pause")
print("正在准备上传文件")
else:
print("oss已经存在文件请确定:{0} 是否在oss存储桶存在Android文件,如果需要需要重新上传则删除下面的文件在重新运行该脚本".format(res))
instr = input("请输入Y或者y确认强制覆盖,输入其他或者不输入则不运行脚本: ")
os.system("pause")
if instr == 'Y' or instr == 'y':
print("正在强制上传中")
else:
exit(0)
elif asd == 'iOS.zip':
filesize = ssh.cmd("ossutil64 du oss://test/test/test/{0}/iOS/ |grep 'total du size(byte)'|cut -d ':' -f 2".format(res))
filesizeq = int(filesize)
print("filesizeq")
if filesizeq == 0:
print("恭喜你,通过校验,请输入回车继续执行上传动作")
os.system("pause")
print("正在准备上传文件")
else:
print("oss已经存在文件请确定:{0} 是否在oss存储桶存在iOS文件,如果需要需要重新上传则删除下面的文件在重新运行该脚本".format(res))
instr = input("请输入Y或者y确认强制覆盖,输入其他或者不输入则不运行脚本: ")
os.system("pause")
if instr == 'Y' or instr == 'y':
print("正在强制上传中")
else:
exit(0)
print("本次上传的版本是{0},以及本次上传的压缩包名字是{1}".format(res,asd))
print("确定是否开始上传,确定的话请输入回车!")
os.system("pause")
print("正在上传压缩包名字为{0},请耐心等候".format(filename))
ssh.upload(filename, cmd + asd)
if asd == 'Android.zip':
print ("正在往oss仓库传输版本是{0},上传时间比较久,请耐心等待".format(res))
ssh.cmd('cd /data/oss && rm -rf Android && unzip Android.zip -d Android ')
ssh.cmd("cd /data/oss && ossutil64 cp -r test oss://test/test/test/{0}/Android/ -f".format(res))
print("文件已传输到{0}这个版本,请核对文件数目是否正确".format(res))
elif asd == 'iOS.zip':
print("正在往oss仓库传输版本是{0},上传时间比较久,请耐心等待".format(res))
ssh.cmd('cd /data/oss && rm -rf iOS && unzip iOS.zip -d iOS ')
ssh.cmd("cd /data/oss && ossutil64 cp -r test oss://goa-overseas-hotfix/hotfix/GoAOS/{0}/iOS/ -f".format(res))
print("文件已传输到{0}这个版本,请核对文件数目是否正确".format(res))
ssh.close()
os.system("pause")