20

I want to use shutil.rmtree in Python to remove a directory. The directory in question contains a .git control directory, which git marks as read-only and hidden.

The read-only flag causes rmtree to fail. In Powershell, I would do "del -force" to force removal of the read-only flag. Is there an equivalent in Python? I'd really rather not walk the whole tree twice, but the onerror argument to rmtree doesn't seem to retry the operation, so I can't use

def set_rw(operation, name, exc):
    os.chmod(name, stat.S_IWRITE)

shutil.rmtree('path', onerror=set_rw)
4

3 に答える 3

40

さらに調査した結果、次のように動作するようです。

def del_rw(action, name, exc):
    os.chmod(name, stat.S_IWRITE)
    os.remove(name)
shutil.rmtree(path, onerror=del_rw)

つまり、onerror 関数で実際にファイルを削除します。(onerror ハンドラーでディレクトリを確認し、その場合は rmdir を使用する必要があるかもしれません - 私はそれを必要としませんでしたが、それは私の問題に固有のものかもしれません.

于 2014-01-21T16:17:13.593 に答える