因此,我有一个“简单”过程,需要执行该过程,然后从另一台服务器中获取数据,然后将目录(以及所有子目录)复制到我的服务器中
代码如下:
import pysftp
dbfs_path = '/dbfs/mnt/aaa/bbb/output/{}/'.format(dbutils.widgets.get("run_name"))
remote_path = '/mst_bbb/{}/output/{}/'.format(bucket,dbutils.widgets.get("run_name"))
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
srv = pysftp.Connection(host=host_name, username="xxx",password="yyy",cnopts=cnopts)
srv.get_r(remote_path,dbfs_path)
一切正常,直到我意识到有时我不得不多次获取相同的目录并抛出错误
该目录已存在
没问题,我想并做了以下事情:
import shutil
shutil.rmtree(dbfs_path)
然后重新运行代码
但是现在我得到了一个完全不同的错误
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-16-9f782d79e03f> in <module>()
12
13 srv = pysftp.Connection(host=host_name, username="xxx",password="yyy",cnopts=cnopts)
---> 14 srv.get_r(remote_path,dbfs_path)
/databricks/python/local/lib/python2.7/site-packages/pysftp/__init__.pyc in get_r(self, remotedir, localdir, preserve_mtime)
309 self.get(fname,
310 reparent(localdir, fname),
--> 311 preserve_mtime=preserve_mtime)
312
313 def getfo(self, remotepath, flo, callback=None):
/databricks/python/local/lib/python2.7/site-packages/pysftp/__init__.pyc in get(self, remotepath, localpath, callback, preserve_mtime)
247 sftpattrs = self._sftp.stat(remotepath)
248
--> 249 self._sftp.get(remotepath, localpath, callback=callback)
250 if preserve_mtime:
251 os.utime(localpath, (sftpattrs.st_atime, sftpattrs.st_mtime))
/databricks/python/local/lib/python2.7/site-packages/paramiko/sftp_client.pyc in get(self, remotepath, localpath, callback)
767 Added the ``callback`` param
768 """
--> 769 with open(localpath, 'wb') as fl:
770 size = self.getfo(remotepath, fl, callback)
771 s = os.stat(localpath)
IOError: [Errno 2] No such file or directory: u'/dbfs/aaa/bbb/output/run_job/./mst_bbb/pri1/output/run_job/date=2017-12-01/2017-12-01_output_0.csv.gz'
任何想法都可能导致此问题?我不明白
谢谢
答案 0 :(得分:0)
我认为component.setHeight("33%")
(get_r
参数)的目标目录必须存在。 pysftp不会为您创建它。
调用localdir
时不仅会删除目录内容,还会删除目录本身。
之后重新创建目录:
shutil.rmtree
尽管实际上,我不理解您的原始问题。我看不到为什么会出现“目录已存在” 错误。也许您应该问这个问题,而不是实施效率低下的解决方法。