Я использую дистрибутив Python2.5.2, включенный в установщик OSGeo4W.Это 32-разрядный дистрибутив, работающий в Windows 7. Хотя PyQt не устанавливается по умолчанию установщиком OSGeo4W, мы установили его для установки OSGeo4W Python и до сих пор он работал отлично.PyQt4 - это версия 4.8.6, созданная для 32-разрядной версии Python.
Как часть пользовательского интерфейса на основе PyQt4, я в настоящее время вызываю 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 успешно обрабатывает мою программу.
Я прочитал в других местах SO , что подпроцесс может быть убит в Python2.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?Какой-нибудь сторонний модуль, возможно?
Большое спасибо.