pysftp和paramiko几秒后停止上传文件
我正在使用 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 的文件……我缺少了什么呢?
1 个回答
5
看起来在上传文件时,paramiko没有自动调整窗口大小。你可以手动增加窗口大小:
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)
这个方法对我有效,但有时候对于大文件来说,这个调整可能还不够,所以我会再加一些额外的字节。我觉得可能会有一些数据包丢失,这也和网络连接有关。