2

我正在使用 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 的文件......我错过了什么?

4

1 回答 1

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)

它对我有用,但有时对于大文件来说还不够,所以我添加了一些额外的字节。我认为,一些数据包可能会丢失,这取决于连接。

于 2014-08-26T18:19:37.413 回答