我正在使用 OSGeo4W 安装程序中包含的 Python2.5.2 发行版。这是一个在 Windows 7 上运行的 32 位发行版。虽然 OSGeo4W 安装程序默认未安装 PyQt,但我们已将其安装到 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 任务管理器,我可以看到我的 CPU 使用率随着 QProcess 愉快地处理我的程序而继续升级。
我在 SO上的其他地方读到过,可以通过 using 在 Python 2.5 中杀死一个子进程os.kill()
,但我的 Python 发行版不包括该kill
函数:
>>> import os
>>> os.kill
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
AttributeError: 'module' object has no attribute 'kill'
在 Python 中杀死进程是否有不同的方法?也许是一些第三方模块?
非常感谢。