プロセスを実行するために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(ヘルプがある場合)。
ありがとう
プロセスディレクトリに切り替えることで同様の問題を解決し(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])
プロセスディレクトリに切り替えると、うまくいくかもしれません。
サブプロセスモジュールでこれを実行しているときに見つけたのは、 'args'の最初のエントリ(subprocess.Popen()
の最初のパラメーター)はパスのない実行可能ファイル名だけである必要があり、executable
を実行可能ファイルの完全パスへの引数リスト。
app = 'app.exe'
appPath = os.path.join(BIN_DIR, app)
commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)
パスに実行可能ファイル(inkscape.exe)の名前が含まれていることを確認してください
または、モジュールが機能しない場合は、"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)
Popen
(argv
の最初の項目)に渡す実行可能ファイルにフルパスを指定していますか?