29

プロセスを実行するために 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) から実行すると、正常に動作します。これはおそらく、スクリプトからこれを実行するときにアクセス許可の問題があることを意味しますが、それらを解決する方法がわかりません。管理者として実行したコマンドからスクリプトを実行しようとしましたが、役に立ちませんでした。同様の投稿を探してみましたが、良い解決策が見つかりませんでした。私は Windows、特に Windows 7 Ultimate x64 で実行しています。

ありがとう

4

5 に答える 5

17

プロセスディレクトリ(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])

たぶん、プロセスディレクトリへの切り替えもあなたのために働くでしょう。

于 2011-08-20T09:06:19.627 に答える
9

subprocess モジュールを使用してこれを実行したときにわかったのは、「args」( の最初のパラメーターsubprocess.Popen()) の最初のエントリは、パスのない実行可能ファイル名だけである必要がありexecutable、引数リストに絶対パスを設定する必要があることです。私の実行可能ファイル。

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

commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)
于 2012-12-12T02:36:11.327 に答える
3

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

于 2013-06-27T02:03:39.577 に答える
2

または、モジュールが機能しない場合は、«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) 
于 2011-01-06T16:11:23.180 に答える
0

渡す実行可能ファイルへのフル パスを指定しますかPopen( の最初の項目argv)。

于 2011-01-16T15:53:48.267 に答える