如何在没有os.kill()的情况下终止进程-OSGeo4W Python 2.5
我正在使用OSGeo4W安装程序中包含的Python2.5.2发行版。这是在Windows 7上运行的32位发行版。虽然PyQt默认情况下不是由OSGeo4W安装程序安装的,但我们已经将其安装到OSGeo4W Python安装程序中,并且到目前为止,它一直运行良好。PyQt4是版本4.8.6,是针对32位版本的Python构建的 作为基于PyQt4的UI的一部分,我当前生成了一个QtCore.QProcess(),并按如下方式启动它:如何在没有os.kill()的情况下终止进程-OSGeo4W Python 2.5,python,qt,osgeo,Python,Qt,Osgeo,我正在使用OSGeo4W安装程序中包含的Python2.5.2发行版。这是在Windows 7上运行的32位发行版。虽然PyQt默认情况下不是由OSGeo4W安装程序安装的,但我们已经将其安装到OSGeo4W Python安装程序中,并且到目前为止,它一直运行良好。PyQt4是版本4.8.6,是针对32位版本的Python构建的 作为基于PyQt4的UI的一部分,我当前生成了一个QtCore.QProcess(),并按如下方式启动它: self.modelProcess = QtCore.QPr
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()
根据,这应该会扼杀进程(在这一点上达成一致)。不幸的是,这并没有终止QProcess。如果我有Windows任务管理器,我可以看到随着QProcess愉快地处理我的程序,我的CPU使用率继续上升
我已经读到,在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中是否有不同的方法来终止进程?也许是第三方模块
非常感谢。您可以这样做:
import os
import subprocess
if platform.system() == "Windows" :
subprocess.Popen("taskkill /F /T /PID %i" % process_pid , shell=True)
else :
os.killpg( process_pid, signal.SIGKILL)
这是跨平台的。
还有一个名为“psutil”的模块:
但是您应该使用32位或64位版本分发应用程序。是一个需要两个参数的函数,而不是参数。因此,您需要使用类似于
os.kill(pid,signal)
.Oops!您在Windows上运行的信息丢失,似乎您至少需要Python2.7。您可以尝试:或注释中提到的其他方法之一。我不能担保这些,因为我现在没有访问Windows的权限。嘿,Greenmart,我的程序实际上调用了os.kill
如下:`os.kill(self.modelProcess.pid(),signal.SIGKILL)`。我将检查python2.7之前的方法。我的第一个评论是针对您在交互模式下输入的导入操作系统操作系统.kill
,因为我误解了错误消息。祝你好运。也许问得很愚蠢,但您能将Python升级到2.7吗?似乎OSGeo4W的人已经在测试:很好!很有创意。谢谢你,J_Zar!