我正在使用OSGeo4W安裝程序中包含的Python2.5.2的分發版。這是一個在Windows 7上運行的32位版本。儘管PyQt並未由OSGeo4W安裝程序默認安裝,但我們已將它安裝到OSGeo4W Python安裝中,並且至今一直運行良好。 PyQt4是4.8.6版,並且是針對32位版本的Python而構建的。如何在沒有os.kill()的情況下終止進程? - OSGeo4W Python 2.5
作爲基於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 documentation,這應該殺死的處理(PyQt documentation同意在這一點上)。不幸的是,這並沒有殺死QProcess。如果我有Windows任務管理器,我可以看到我的CPU使用率繼續升高,因爲QProcess快樂地處理我的程序。
我以os.kill()
讀elsewhere on SO是子進程可以在Python 2.5被殺死,但我的Python的分佈不包括kill
功能:
>>> import os
>>> os.kill
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
AttributeError: 'module' object has no attribute 'kill'
是否有不同的方法來殺死進程蟒蛇?也許有些第三方模塊?
非常感謝。
[os.kill()](http://docs.python.org/library/os.html#os.kill)是一個需要兩個參數的函數,而不是[os]的參數(http:// docs.python.org/library/os.html#module-os)。因此你需要用'os.kill(pid,signal)'來稱呼它。 – GreenMatt
糟糕!在Windows上運行失蹤,看來你至少需要Python 2.7。 – GreenMatt
您可以嘗試:http://blogs.oracle.com/rajkumar/entry/how_to_kill_a_process或者評論中提到的其他方法之一。我無法擔保其中任何一項,因爲我現在無法訪問Windows。 – GreenMatt