使用paramiko 上传文件到sftp服务器: 代码: import paramiko import types from batchdb import * __author__ = 'hp' def LogSftp(files, sftp_type): conn = gen_db_connection() ip = str(get_para(conn, 'sftp', 'ip')) port = int(get_para(conn, 'sftp', 'port')) if not port: port = 22 username = str(get_para(conn, 'sftp', 'username')) password = str(get_para(conn, 'sftp', 'password')) remote_path = str(get_para(conn, 'sftp', 'path')) return_code = True # if not os.path.exists(remote_path): os.mkdir(remote_path) if type(files) == types.ListType: pass else: files = [files] try: transport = paramiko.Transport((ip, port)) transport.connect(username= username, password= password) sftp = paramiko.SFTPClient.from_transport(transport) except: log(conn,'sftp', 'Connect to server%s %s failed!'%(ip, port), '1' ) return False try: sftp.chdir(remote_path) except: log(conn, 'sftp', 'chdir server-%s file path %s failed!'%(ip,remote_path), '1') return False # 上传文件到服务器 if sftp_type == 'put': for f in files: f_remote = os.path.split(f)[-1] #remo_file_path = remote_path + f_remote try: sftp.put(f, f_remote) log(conn, 'sftp', 'put log file %s to server-%s successfully!'%(f, ip),'0') except: return_code = False log(conn,'sftp', 'Put file %s to server-%s failed! '%(f, ip),'1') # 从服务器 下载文件到本地 # 注意的是这里的sftp服务上的路径为 sftp下的路径 elif sftp_type == 'get': sftp.get(f_remote_path, f_local_path) sftp.close() transport.close() conn.close() return return_code