2014-12-06 59 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 
相關問題