未找到 Python SFTP 文件错误

Joh*_*tom 5 python ftp sftp

我正在尝试使用pysftp库将 SFTP 目录中的所有文件下载到本地文件夹。我的代码如下所示:

import pysftp

sftp = pysftp.Connection('server', username = 'name', password = 'password')

sftp.get_d('Daily_Reports', '/home/jchrysostom/Documents/SupplyChain/Daily_Reports/')
Run Code Online (Sandbox Code Playgroud)

Daily_Reports是 SFTP 服务器上存在的文件夹 - 我已经验证了这一点。我也验证了/home/jchrysostom/Documents/SupplyChain/Daily_Reports/存在。我可以cd在终端中毫无问题地使用它。

但是,当我运行此 python 脚本时,出现以下错误: IOError: [Errno 2] File not found.

任何想法可能导致这种情况?

更新:一项小调查表明文件实际上已经下载。事实上,所有这些都下载得很好。但是,我无法运行脚本的其余部分,因为它由于某种原因出错。这只是库中的错误吗?

更新 2 - 完整回溯,根据要求:

Traceback (most recent call last):
  File "supplychain.py", line 20, in <module>
    sftp.get_d('Daily_Reports','/home/jchrysostom/Documents/SupplyChain/Daily_Reports/')
  File "/usr/local/lib/python2.7/dist-packages/pysftp.py", line 255, in get_d
    preserve_mtime=preserve_mtime)
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/usr/local/lib/python2.7/dist-packages/pysftp.py", line 497, in cd
    self.cwd(original_path)
  File "/usr/local/lib/python2.7/dist-packages/pysftp.py", line 510, in chdir
    self._sftp.chdir(remotepath)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 580, in chdir
    if not stat.S_ISDIR(self.stat(path).st_mode):
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 413, in stat
    t, msg = self._request(CMD_STAT, path)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 729, in _request
    return self._read_response(num)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 776, in _read_response
    self._convert_status(msg)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 802, in _convert_status
    raise IOError(errno.ENOENT, text)
IOError: [Errno 2] File not found
Run Code Online (Sandbox Code Playgroud)

Joh*_*tom 0

据我所知,这是pysftp. 文件已成功复制,但(至少根据此处的回溯)当库尝试更改回 FTP 服务器上的原始远程工作目录时,库就会崩溃。

解决方法是迭代目录中的文件,并且get()每个文件单独......

for filename in sftp.listdir('Daily_Reports'):
    sftp.get('Daily_Reports/' + filename, localpath = '/home/jchrysostom/Documents/SupplyChain/Daily_Reports/' + filename)
Run Code Online (Sandbox Code Playgroud)