web-dev-qa-db-ja.com

WindowsError [エラー5]アクセスが拒否されました

プロセスを実行するためにkillableprocessパッケージ(サブプロセスの上に構築された)を使用していますスクリプトで "killableprocess.Popen(command)"コードを実行するたびに、次のエラーが発生します。

File "killableprocess.py", line 157, in _execute_child
  winprocess.AssignProcessToJobObject(self._job, hp)
File "winprocess.py", line 37, in ErrCheckBool
  raise WinError()
WindowsError [error 5] Access is denied
Exception TypeError: "'NoneType' object is not callable" in <bound method AutoHANDLE.__del__ of <AutoHANDLE object at 0x025D42B0>> ignored

しかし、pythonインタラクティブコンソール(python 2.6))から実行すると、正常に動作します。これは、スクリプトからこれを実行すると、権限の問題が発生することを意味しますが、方法がわかりませんそれらを解決しました。管理者として実行したcmdからスクリプトを実行しようとしましたが、役に立ちませんでした。同様の投稿を探しましたが、良い解決策が見つかりませんでした。Windowsで実行しているここでいくつかの助けを見つけたいと思います、特にWindows 7 Ultimate x64(ヘルプがある場合)。

ありがとう

28
Serg

プロセスディレクトリに切り替えることで同様の問題を解決し(inkscapeを使用しようとしました)、問題を解決しました

import subprocess
inkscape_dir=r"C:\Program Files (x86)\Inkscape"
assert os.path.isdir(inkscape_dir)
os.chdir(inkscape_dir)
subprocess.Popen(['inkscape.exe',"-f",fname,"-e",fname_png])

プロセスディレクトリに切り替えると、うまくいくかもしれません。

13
tjb

サブプロセスモジュールでこれを実行しているときに見つけたのは、 'args'の最初のエントリ(subprocess.Popen()の最初のパラメーター)はパスのない実行可能ファイル名だけである必要があり、executableを実行可能ファイルの完全パスへの引数リスト。

app = 'app.exe'
appPath = os.path.join(BIN_DIR, app)

commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)
9
dash-tom-bang

パスに実行可能ファイル(inkscape.exe)の名前が含まれていることを確認してください

3
oabarca

または、モジュールが機能しない場合は、"subprocess"モジュールを使用できます。

import subprocess, os, time

process = subprocess.Popen("somecommand", Shell=True)
n = 0
while True:
    if not process.poll():
        print('The command is running...')
        if n >= 10:
            pid = process.pid()
            os.kill(pid, 9) # 9 = SIGKILL
    else:
        print('The command is not running..')
    n += 1
    time.sleep(1) 
2
user563964

Popenargvの最初の項目)に渡す実行可能ファイルにフルパスを指定していますか?

0
ulidtko