OSGeo4Wインストーラーに含まれているPython2.5.2のディストリビューションを使用しています。これはWindows7で実行される32ビットディストリビューションです。PyQtはOSGeo4Wインストーラーによってデフォルトでインストールされませんが、OSGeo4W Pythonインストールにインストールされており、これまで完全に機能していました。PyQt4はバージョン4.8.6であり、32ビットバージョンのPythonに対して構築されています。
PyQt4ベースのUIの一部として、現在QtCore.QProcess()を生成し、次のように開始します。
self.modelProcess = QtCore.QProcess()
command = './OSGeo4W/gdal_python_exec.bat'
argslist = 'QtCore.QString(uri, json.dumps(inputDict))
self.modelProcess.start(command, argslist)
ここinputDict
で、はPython文字列を任意の値にマッピングするPython辞書であり、uri
は実行するスクリプトへの文字列URIです。
このプロセスの実行中、ユーザーには「キャンセル」ボタンを含むいくつかのQtウィジェットを含むウィンドウが表示されます。「キャンセル」ボタンの信号/スロット構成は次のとおりです。
self.cancelButton = QtGui.QPushButton('Cancel')
self.cancelButton.clicked.connect(self.closeWindow)
そして他の場所:
def closeWindow(self):
self.modelProcess.kill()
Qtのドキュメントによると、これはプロセスを強制終了するはずです(PyQtのドキュメントはこの点に同意しています)。残念ながら、これによってQProcessが強制終了されることはありません。Windowsタスクマネージャーを使用している場合、QProcessがプログラムを正常に処理しているため、CPU使用率が上昇し続けることがわかります。
私はSOの他の場所で、を使用してPython 2.5でサブプロセスを強制終了できることを読みましたが、Pythonのディストリビューションには次の関数os.kill()
が含まれていません。kill
>>> import os
>>> os.kill
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
AttributeError: 'module' object has no attribute 'kill'
Pythonでプロセスを強制終了するための別のアプローチはありますか?サードパーティのモジュール、おそらく?
どうもありがとう。