2011-07-29 12 views
1

shutil.rmtree(some_folder)を呼び出そうとしていますが、別のプロセスがサブツリー内のファイルを使用しているというエラーが発生しています。これは当てはまりませんので、私はアクセス許可が正しく設定されていないと仮定しています。フォルダ、すべてのサブフォルダ、およびすべてのファイルのアクセス許可を変更します。

私はshutil.rmtreeを呼び出して削除することができるように、いくつかのルートの下のすべてのサブフォルダとファイルの権限を書き込み可能に変更するにはどうすればよいですか?利用可能chmodコマンドを使用して、プラットフォームの

おかげ

+3

あなたはどのプラットフォームにいますか?あなたのファイルシステムは何ですか?正確なエラーメッセージは何ですか? –

+0

あなたはWindozeにいますか? –

答えて

7

は、あなたがこれを行うことができます:

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

関連する問題