Pythonでshutil.rmtree
を使用してディレクトリを削除したい。問題のディレクトリには.git
制御ディレクトリが含まれており、gitは読み取り専用で非表示としてマークします。
読み取り専用フラグにより、rmtree
は失敗します。 Powershellでは、「del -force」を実行して、読み取り専用フラグを強制的に削除します。 Pythonに同等のものはありますか?ツリー全体を2回ウォークしたくないのですが、rmtreeのonerror
引数が操作を再試行していないようであるため、使用できません。
def set_rw(operation, name, exc):
os.chmod(name, stat.S_IWRITE)
shutil.rmtree('path', onerror=set_rw)
さらに調査したところ、次のことが機能しているようです。
def del_rw(action, name, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
shutil.rmtree(path, onerror=del_rw)
つまり、onerror関数で実際にファイルを削除します。 (onerrorハンドラーでディレクトリをチェックし、その場合はrmdirを使用する必要があるかもしれません-私はそれを必要としませんでしたが、それは私の問題に固有のものかもしれません。