我正在使用python 3.4和pysftp,(pysftp怀疑是在3.4上工作)
Pysftp是paramiko的包装。
下载文件没问题。
我也可以上传小文件。
当我上传需要超过几秒钟的文件时,我才会收到错误。 我监控了我的互联网连接,大约3秒钟后就没有上传了。
约5分钟后我收到了EOFError
我还尝试了paramiko模块,结果相同。
我可以使用open ssh和filezilla上传文件而没有问题。
with pysftp.Connection(host="host",username="python",
password="pass",port=2222) as srv:
print('server connected')
srv.put(file_name)
我希望能够上传大于几kb的文件......我缺少什么?
答案 0 :(得分:5)
似乎paramiko在文件上传期间没有调整窗口。你可以手动增加window_size:
with pysftp.Connection(host="host",username="python",
password="pass",port=2222) as srv:
print('server connected')
channel = srv.sftp_client.get_channel()
channel.lock.acquire()
channel.out_window_size += os.stat(file_name).st_size
channel.out_buffer_cv.notifyAll()
channel.lock.release()
srv.put(file_name)
它适用于我,但有时它对于大文件是不够的,所以我添加了一些额外的字节。我认为,有些数据包可能会丢失,这取决于连接。