我正在尝试使用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
答案 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)