建模程序 多个定时程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

91 lines
2.8 KiB

import paramiko
import os
# 使用示例
sftp_host = "172.31.1.3" # SFTP 服务器地址
sftp_port = 22 # SFTP 端口号
sftp_user = 'gpu' # SFTP 登录用户名
sftp_passwd = '2024' # SFTP 登录密码
# 获取当前文件上一层目录,即项目目录 make2 底下
local_root_path = "G:\\obj_fix\print"
# 定义函数来递归遍历文件夹下的所有文件
def list_files(directory):
for root, dirs, files in os.walk(directory):
for file in files:
yield os.path.join(root, file)
def sftp_upload(sftp_host, sftp_port, sftp_user, sftp_passwd, local_file, remote_file):
# 创建 SSH 客户端对象
ssh_client = paramiko.SSHClient()
try:
# 设置自动添加主机密钥
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到 SFTP 服务器
ssh_client.connect(sftp_host, port=sftp_port, username=sftp_user, password=sftp_passwd)
# 创建 SFTP 客户端对象
sftp_client = ssh_client.open_sftp()
# 判断 local_file 是文件还是目录
if os.path.isdir(local_file):
try:
# 如果远程目录不存在,则创建
sftp_client.mkdir(remote_file)
except IOError:
# 目录已存在,忽略
pass
# 切换至远程目录
sftp_client.chdir(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):
# 如果是文件,上传文件
sftp_client.put(local_path, file_name)
else:
# 如果是文件,直接上传文件
sftp_client.put(local_file, remote_file)
print("上传成功")
except Exception as e:
print(f"上传文件失败:{e}")
finally:
# 关闭 SFTP 客户端和 SSH 连接
sftp_client.close()
ssh_client.close()
if __name__ == '__main__':
nums = 0
#遍历 local_root_path 下的所有文件
for file_path in list_files(local_root_path):
if "around" in file_path:
continue
if "_old.obj" in file_path:
# if ".obj" not in file_path:
# continue
arrTemp = file_path.split('\\')
pid = arrTemp[len(arrTemp)-2]
nums += 1
# # pid = "164"
# 本地文件路径
dirPath = f'{local_root_path}/{pid}/{pid}.obj'
# 远程服务的路径
remote_file = f"/data/datasets/obj_fix/{pid}/{pid}.obj"
sftp_upload(sftp_host, sftp_port, sftp_user, sftp_passwd, dirPath, remote_file)
print(pid,file_path,"---剩余---",524 - nums)