如何使用Python从Windows将密码验证过的SFTP服务器上的文件放入?

时间:2019-11-18 21:01:35

标签: python windows sftp paramiko pysftp

我花了数小时来解决这个问题,在网上搜寻,但总体上没有运气。设置如下:

  • Windows 10
  • Python 3(在带有VS代码的REPL中播放)
  • 仅通过 密码
  • 进行SFTP服务器身份验证
  • 将1GB以上的大文件存储到PUT

最初,我写了一些Pysftp(Paramiko)代码:

import pysftp
with pysftp.Connection(host=host, username=username,
                       password=password, cnopts=sftp_options) as sftp:
    sftp.put(localpath, remotepath, confirm=True)

在测试时适用于较小的文件。它也成功运行了一个大文件,但是回头看该文件夹时找不到文件。我毫无根据的预感是,它花了太长时间,帕拉米科不知不觉地将这些碎屑打成一片空白。

我转而使用sftp命令行实用程序,该实用程序可在Windows 10上方便地使用。我能够手动测试上传的工作方式如下:

sftp username@host
Welcome to this funky Secure FTP Server. Please enter your password:
sftp> PUT localpath remotepath
sftp> QUIT

显然,关键问题是 password 输入,我弯下腰试图用Popen()使之自动化。我在StackOverflow上阅读并仔细研究了这些内容:Use subprocess to send a passwordPython: How to read stdout of subprocess in a nonblocking way。这场比赛没有任何结果。

我能够读取输出,但输入似乎总是来自键盘 。然后,我尝试了Pexpect,由于在Windows it operates differently上也无法使用,因此在某些程序上也无法使用:

  

PopenSpawn不能直接替代spawn。许多程序只有在检测到它们正在终端中运行时,才提供交互行为。当由PopenSpawn运行时,它们的行为可能会有所不同。


  • UPDATE 11/19:我能够执行PuTTY的命令行psftp.exe,该命令行接受password作为参数。我还确认,带有大文件的Pysftp / Paramiko在我自己设置的SFTP服务器上可以正常工作,因此与供应商的服务器有关(我无能为力)。我将继续解决这个问题,并希望在此处发布完整的答案。

除了求助于Ubuntu via WSL之外,还有谁对如何在Windows上使用Python 3.x将文件上传到SFTP服务器上有任何想法?

0 个答案:

没有答案