pysftp和paramiko在几秒钟后停止上传文件

时间:2014-08-03 14:40:55

标签: python sftp paramiko pysftp

我正在使用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 个答案:

答案 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)

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