我正在尝试使用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)
据我所知,这是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)