Я не могу воспроизвести вашу точную проблему, но на самом деле рекурсивные функции pysftp, как известно, реализованы таким образом, что они вызывают сбой в Windows (или любой системе, которая не использует * nix-подобный синтаксис пути).
Он использует функции os.sep
и os.path
для удаленных путей SFTP, что не так, поскольку пути SFTP всегда используют прямую косую черту.
Но вы можете легко реализовать переносимую замену:
import os
def put_r_portable(sftp, localdir, remotedir, preserve_mtime=False):
for entry in os.listdir(localdir):
remotepath = remotedir + "/" + entry
localpath = os.path.join(localdir, entry)
if not os.path.isfile(localpath):
try:
sftp.mkdir(remotepath)
except OSError:
pass
put_r_portable(sftp, localpath, remotepath, preserve_mtime)
else:
sftp.put(localpath, remotepath, preserve_mtime=preserve_mtime)
Используйте это как:
put_r_portable(sftp, sftp_local_path, sftp_remote_path, preserve_mtime=False)
Подобный вопрос о get_r
см.
Python pysftp get_rиз Linux отлично работает на Linux, но не на Windows