Python SFTP文件未找到错误

时间:2015-04-23 12:26:06

标签: 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/')

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

1 个答案:

答案 0 :(得分:0)

尽我所知,这是pysftp中的错误。这些文件正在被成功复制,但是(至少根据此处的回溯),当库试图更改回FTP服务器上的原始远程工作目录时,库正在爆炸。

解决方法是遍历目录中的文件并单独get() ...

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