如何终止进程os.杀死()OSGeo4W Python 2.5

2024-09-26 18:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是OSGeo4W安装程序中包含的Python2.5.2发行版。这是一个运行在Windows7上的32位发行版。虽然PyQt在默认情况下不是由OSGeo4W安装程序安装的,但是我们已经将其安装到osgeo4wpython安装程序中,并且它一直工作得很好。PyQt4是4.8.6版,是针对32位版本的Python构建的。在

作为基于PyQt4的UI的一部分,我当前生成了一个QtCore.q进程()然后这样开始:

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小部件的窗口,包括一个“cancel”按钮。“取消”按钮的信号/插槽配置如下:

^{pr2}$

然后在其他地方:

def closeWindow(self):
    self.modelProcess.kill()

根据Qt documentation,这应该会终止进程(PyQt documentation同意这一点)。不幸的是,这并没有杀死QProcess。如果我有Windows任务管理器,我可以看到随着QProcess愉快地处理我的程序,我的CPU使用率继续上升。在

我读过elsewhere on 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中有没有不同的方法来终止进程?也许是第三方模块?在

非常感谢。在


Tags: 字符串self进程osuricommandpyqtkill
1条回答
网友
1楼 · 发布于 2024-09-26 18:19:21

您可以这样做:

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”的模块:

https://github.com/giampaolo/psutil

但您应该使用32位或64位版本分发应用程序。在

相关问题 更多 >

    热门问题