web-dev-qa-db-ja.com

どのユーザーがpythonスクリプトをWindowsのように実行しますか?

pythonいくつかのディレクトリを削除しようとすると、アクセスエラーが発生します。pythonユーザーアカウントに権限がないと思いますか?

WindowsError: [Error 5] Access is denied: 'path'

スクリプトを実行すると得られるものです。
私はもう試した

shutil.rmtree  
os.remove  
os.rmdir

それらはすべて同じエラーを返します。

32
DevelopingChris

'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)

あなたはそれを試してみたいかもしれません。

63
ThomasH

Pythonを使用したことはありませんが、スクリプトを実行するユーザーと同じように実行されると思います。

3
Max Schmeling

スクリプトには特別なユーザーはなく、スクリプトを実行した現在ログインしているユーザーの下で実行されます。

それをチェックしてみましたか:

  • 有効なパスを削除しようとしていますか?そしてそれ
  • パスにロックされたファイルがありませんか?
2
Yuval Adam

スクリプトをどのように実行していますか?インタラクティブなコンソールセッションから?その場合は、DOSコマンドウィンドウを開いて(cmdを使用)、「whoami」と入力します。それが、スクリプトをインタラクティブに実行している人です。

さて、あなたの編集を今見ました...パスを印刷し、プロパティをチェックして、スクリプトを実行しているユーザーアカウントに必要な権限があるかどうかを確認してみませんか?

お使いのバージョンのWindowsでwhoamiが機能しない場合は、コマンドウィンドウからSETUSERNAMEやSETDOMAINNAMEなどの環境変数を使用できます。

0
msvcyc

@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
0
fylb