不同的主机之间传送文件可以使用scp命令,但是Python中的paramiko模块也可是实现此功能,代码如下:
import settings_file # 配置的远程主机信息文件,以及存放路径文件
import paramiko
class WriteImgToRemote(object):
'''把图片写入远程主机'''
def __init__(self):
self.remote_host = settings_file.REMOTE_HOST
self.remote_port = settings_file.REMOTE_PORT
self.remote_user = settings_file.REMOTE_USER
self.remote_pwd = settings_file.REMOTE_PWD
def call_back(self,size,file_size):
'''上传成功的回调函数'''
pass
def put_img_remote(self,club_num,local_path,dest_file_name):
'''
本地图片上传到远程机器
:param club_num: 俱乐部微信号
:param local_path: 本地图片路径
:param dest_file_name: 远程存储的文件名,例如:hello.png
:return:
'''
transport = paramiko.Transport((self.remote_host, self.remote_port))
transport.connect(username=self.remote_user, password=self.remote_pwd)
sftp = paramiko.SFTPClient.from_transport(transport)
# 判断当前俱乐部的文件夹是否存在,不存在就创建
SAVE_PATH = settings_file.SAVE_PATH
try:
sftp.stat(SAVE_PATH+club_num)
print('当前俱乐部:%s 文件夹存在'%club_num)
except Exception as e:
print('开始创建文件夹 %s'%club_num)
club_folder = SAVE_PATH + club_num
sftp.mkdir(club_folder)
print('创建完成')
remote_path = SAVE_PATH + club_num + '/' + dest_file_name
sftp.put(local_path,remote_path,self.call_back)
transport.close()
if __name__ == '__main__':
local_path = '/home/tom/img/1930577776.png'
dest_file_name = '77776.png'
obj = WriteImgToRemote()
obj.put_img_remote('my_club',local_path,dest_file_name)