2011-07-29 236 views
1

我試圖撥打shutil.rmtree(some_folder),但它導致另一個進程正在使用子樹中某個文件的錯誤。情況並非如此,所以我假設權限設置不正確。更改文件夾,所有子文件夾和所有文件的權限

如何將一些根下的所有子文件夾和文件的權限更改爲可寫,因此我可以調用shutil.rmtree並刪除它們?

感謝

+3

你在哪個平臺上?什麼是您的文件系統?什麼是確切的錯誤信息? –

+0

你在Windoze嗎? –

回答

7

在與chmod命令提供了一個平臺,你可以這樣做:

subprocess.call(['chmod', '-R', '+w', some_folder]) 

假設some_folder是一個字符串,是全路徑要修改的文件夾。

+0

它是大寫'-R'。 –

+0

謝謝。糾正。 – multipleinterfaces

5

使用os

import os 
def change_permissions_recursive(path, mode): 
    for root, dirs, files in os.walk(path, topdown=False): 
     for dir in [os.path.join(root,d) for d in dirs]: 
      os.chmod(dir, mode) 
     for file in [os.path.join(root, f) for f in files]: 
      os.chmod(file, mode) 

如果你只想讓他們寫額外的標誌:

import os, stat 
def get_perm(fname): 
    return stat.S_IMODE(os.lstat(fname)[stat.ST_MODE]) 

def make_writeable_recursive(path): 
    for root, dirs, files in os.walk(path, topdown=False): 
     for dir in [os.path.join(root, d) for d in dirs]: 
      os.chmod(dir, get_perm(dir) | os.ST_WRITE) 
     for file in [os.path.join(root, f) for f in files]: 
      os.chmod(file, get_perm(file) | os.ST_WRITE) 

如果您使用的是Windows,這可能無法正常工作,請參閱的文檔os.chmod

+1

對於Py3 +我相信常數應該是'stat.S_IWRITE' [等等](https://docs.python.org/3/library/os.html#os.chmod)。 – Jens

相關問題