From 118d4774f62b350124a5ce62169c9c757c9f411f Mon Sep 17 00:00:00 2001 From: dongchangxi <458593490@qq.com> Date: Tue, 10 Oct 2023 16:16:16 +0800 Subject: [PATCH] =?UTF-8?q?ftp=20=E6=89=B9=E9=87=8F=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=88=96=E8=80=85=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ftp.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tools/ftp.py diff --git a/tools/ftp.py b/tools/ftp.py new file mode 100644 index 0000000..c5c4bff --- /dev/null +++ b/tools/ftp.py @@ -0,0 +1,81 @@ +from ftplib import FTP +import os + + +# 使用示例 +ftp_hosts = ["172.31.1.11","172.31.1.12","172.31.1.13","172.31.1.14","172.31.1.15","172.31.1.16","172.31.1.17"] # FTP 服务器地址 +ftp_user = 'pi' # FTP 登录用户名 +ftp_passwd = 'ph2008' # FTP 登录密码 +#获取当前文件上一层目录,即项目目录 make2 底下 +local_file = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +def upload_file(ftp_host, ftp_user, ftp_passwd, local_file, remote_file): + ftp = FTP(ftp_host) + ftp.login(user=ftp_user, passwd=ftp_passwd) + + #判断 local_file 是文件还是目录 + if os.path.isdir(local_file): + if remote_file not in ftp.nlst(): + ftp.mkd(remote_file) + + # 切换至远程目录 + ftp.cwd(remote_file) + + # 遍历本地目录 + for file_name in os.listdir(local_file): + local_path = os.path.join(local_file, file_name) + + if os.path.isfile(local_path): + # 如果是文件,上传文件 + with open(local_path, 'rb') as file: + ftp.storbinary(f'STOR {file_name}', file) + ftp.quit() + return + + + # 打开本地文件 + with open(local_file, 'rb') as file: + # 上传文件到指定目录 + ftp.storbinary(f'STOR {remote_file}', file) + + ftp.quit() + + + +if __name__ == '__main__': + + #获取输入的文件名,有路劲需要携带路劲 + local_file = input("请输入文件名/目录:例如 main_step1.py 或者 tools/ftp.py 或者目录 tools ->") + if local_file == "": + print("文件不能为空") + exit() + #本地文件的路径构造 + dirPath = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+"/" + local_file + #检测文件是否存在 + if os.path.exists(dirPath) == False: + print("文件/目录 不存在") + exit() + + #请选择是否上传到 apps 目录下 还是上传到 make2 下 + upload_path = input("请选择是否上传到 apps 目录下 还是上传到 make2 下 ->") + if upload_path != "apps" and upload_path != "make2": + print("不支持该目录上传") + exit() + + #请选择是否上传到全部的服务器 11 到 17 + isIp = input("请选择是否上传到全部的服务器 11 到 17,全部上传输入yes, 指定服务上传输入IP ->") + if isIp == "": + print("输入不能为空") + exit() + #远程服务的路径 + remote_file = "/" + upload_path + "/" + local_file + + #上传到全部的服务器上去 + if isIp == "yes": + for ftp_host in ftp_hosts: + upload_file(ftp_host, ftp_user, ftp_passwd, dirPath, remote_file) + else: + #上传到指定的服务器上去 + ftp_host = isIp + upload_file(ftp_host, ftp_user, ftp_passwd, dirPath, remote_file) + + print("上传成功") \ No newline at end of file