ai didi

python - 使用 Python 的 PySFTP 和 get_r - "No such file or directory"

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:21 24 4
gpt4 key购买 nike

所以我有一个“简单”的过程,需要出去从另一台服务器获取数据,然后将目录(和所有子目录)复制到我的服务器

代码如下:

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)

它工作得很好,直到我意识到有时我必须多次获取相同的目录,并且会抛出一个错误

the directory already exists

没问题,我思考并执行了以下操作:

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'

有什么想法可能导致此问题吗?我想不通

谢谢

最佳答案

我相信get_r(localdir参数)的目标目录必须存在。 pysftp 不会为您创建它。

虽然您对 shutil.rmtree 的调用不仅会删除目录内容,还会删除目录本身。

之后重新创建目录:

shutil.rmtree(dbfs_path)  
os.mkdir(dbfs_path)
<小时/>

虽然实际上,我不明白你原来的问题。我不明白为什么您会收到“目录已存在”错误。也许您应该询问该问题,而不是实现低效的解决方法。

关于python - 使用 Python 的 PySFTP 和 get_r - "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52305390/

24 4 0
文章推荐: c# - 为什么拆分不在 UI 线程上运行的任务以使 WPF 应用程序更具响应性?
文章推荐: image - 从点获取畸变变换
文章推荐: javascript - 根据用户输入在页面上创建金字塔结构图
文章推荐: python Flask SocketIO 使用 eventlet 抛出 SSL 错误
太空宇宙
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com