2014-12-06 50 views
1

我正在使用python脚本获取S3存储桶中的所有文件。相关的代码片段如下:从S3存储桶下载密钥/文件的特殊错误 - [错误1]不允许操作

 print ("Downloading files...") 
     for f in files: 
      cwd=os.getcwd() 
      fname=cwd+"/" 
      fname = fname+f.name 
      dir = os.path.dirname(fname) 
      if not os.path.exists(dir): 
        print dir 
        os.makedirs(dir) 
      try: 
       f.get_contents_to_filename(fname) 
      except OSError,e: 
       print e 

当我做这个是用来存储日志文件水桶,我得到关于该桶中的所有文件夹此错误。例如。为日志文件夹在这里:

Downloading files... 
/private/tmp/test/logs 
[Errno 1] Operation not permitted: '/private/tmp/test/logs/ 

尽管出现错误,所有的目录和文件被下载。

为什么会发生这种情况?它不会发生在任何其他存储桶上,除了将其他存储桶的日志文件发送到的存储桶之外。或者它与代码有关?或者存储桶上的权限。它具有默认权限,没有任何改变。

+0

基本上,用户在其下运行你的机器上运行此脚本,没有权限写入到目录/私有的/ tmp /测试/日志/。您需要检查该目录的权限(或所有者)。 – 2014-12-06 09:13:59

+0

我不认为是这样。因为,正如我所说的,当我尝试将它们下载到同一个目录中时,它可以很好地与其他具有文件夹的s3存储桶配合使用。 只有这一个桶似乎有这个问题,它是专门用于转储日志文件的存储桶。 – 2014-12-06 16:50:22

+0

那么,你可以通过运行'''result = f.get_contents_as_string()'''来轻松地检查它,并且在实际下载完成后,用open(fname,'w')将内容保存到系统'''中作为fd: fd.write(result)''',并检查,哪些操作引发异常。 – 2014-12-06 17:04:52

回答

1

以@pavel_form的建议,我找到了问题。我正在试图写一个目录作为一个文件。修正了使用该块中的代码,具体检查,如果基本名称为空:

  if (not os.path.basename(fname)==""): 
       try: 
        f.get_contents_to_filename(fname) 
       except OSError,e: 
        print e 
相关问题