pythonいくつかのディレクトリを削除しようとすると、アクセスエラーが発生します。pythonユーザーアカウントに権限がないと思いますか?
WindowsError: [Error 5] Access is denied: 'path'
スクリプトを実行すると得られるものです。
私はもう試した
shutil.rmtree
os.remove
os.rmdir
それらはすべて同じエラーを返します。
'readonly'に設定されている場合、コピーしたばかりであっても、Windowsでファイルとディレクトリを削除する際に問題が発生しました。 shutil.rmtree()
は、この状況を処理するための一種の例外ハンドラーを提供します。これを呼び出して、次のような例外ハンドラーを提供します。
import errno, os, stat, shutil
def handleRemoveReadonly(func, path, exc):
excvalue = exc[1]
if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
func(path)
else:
raise
shutil.rmtree(filename, ignore_errors=False, onerror=handleRemoveReadonly)
あなたはそれを試してみたいかもしれません。
Pythonを使用したことはありませんが、スクリプトを実行するユーザーと同じように実行されると思います。
スクリプトには特別なユーザーはなく、スクリプトを実行した現在ログインしているユーザーの下で実行されます。
それをチェックしてみましたか:
スクリプトをどのように実行していますか?インタラクティブなコンソールセッションから?その場合は、DOSコマンドウィンドウを開いて(cmdを使用)、「whoami」と入力します。それが、スクリプトをインタラクティブに実行している人です。
さて、あなたの編集を今見ました...パスを印刷し、プロパティをチェックして、スクリプトを実行しているユーザーアカウントに必要な権限があるかどうかを確認してみませんか?
お使いのバージョンのWindowsでwhoamiが機能しない場合は、コマンドウィンドウからSETUSERNAMEやSETDOMAINNAMEなどの環境変数を使用できます。
@ThomasH:壁にもう1つのレンガ。
UNIXシステムでは、親ディレクトリも書き込み可能であることを確認する必要があります。ここに別のバージョンがあります:
def remove_readonly(func, path, exc):
excvalue = exc[1]
if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
# ensure parent directory is writeable too
pardir = os.path.abspath(os.path.join(path, os.path.pardir))
if not os.access(pardir, os.W_OK):
os.chmod(pardir, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO)
os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
func(path)
else:
raise