1 回答
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
我無(wú)法重現(xiàn)您的確切問(wèn)題,但確實(shí)已知 pysftp 的遞歸函數(shù)的實(shí)現(xiàn)方式使它們?cè)?Windows(或任何不使用 *nix-like 路徑語(yǔ)法的系統(tǒng))上失敗。
Pysftp 對(duì)遠(yuǎn)程 SFTP 路徑的使用os.sep和os.path功能,有什么問(wèn)題,因?yàn)?SFTP 路徑總是使用正斜杠。
但是您可以輕松實(shí)現(xiàn)便攜式替換:
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)
請(qǐng)注意,上面的代碼可以很容易地修改為直接使用 Paramiko,以防您不想使用 pysftp。Paramiko類SFTPClient也有該put方法。唯一的區(qū)別是 Paramikoput沒有preserve_mtime參數(shù)/功能(但如果需要,它可以很容易地實(shí)現(xiàn))。
添加回答
舉報(bào)
