Python PyQt应用程序成功关闭,但进程未终止?

Python PyQt应用程序成功关闭,但进程未终止?,python,pyqt,pyqt4,sys,Python,Pyqt,Pyqt4,Sys,我只是注意到,当我运行一个pyqt应用程序并将其关闭时,该应用程序将关闭,但进程仍然处于活动状态。显然,即使在关闭应用程序后,正在运行的进程也不会关闭 Traceback (most recent call last): File "F:\Projects\XYZ\XYZ\XYZ.py", line 414, in <module> sys.exit(app.exec_()) SystemExit: 0 回溯(最近一次呼叫最后一次): 文件“F:\Projects\XY

我只是注意到,当我运行一个pyqt应用程序并将其关闭时,该应用程序将关闭,但进程仍然处于活动状态。显然,即使在关闭应用程序后,正在运行的进程也不会关闭

Traceback (most recent call last):
  File "F:\Projects\XYZ\XYZ\XYZ.py", line 414, in <module>
    sys.exit(app.exec_())
SystemExit: 0
回溯(最近一次呼叫最后一次):
文件“F:\Projects\XYZ\XYZ\XYZ.py”,第414行,在
sys.exit(app.exec_())
系统出口:0
当我在网上搜索时,它说如果返回值为0,则为正常终止。正如您所看到的,在我运行应用程序时,该过程一直在起球

Traceback (most recent call last):
  File "F:\Projects\XYZ\XYZ\XYZ.py", line 414, in <module>
    sys.exit(app.exec_())
SystemExit: 0


那么我如何克服这个问题呢?

这看起来像是一个特定于IDLE的问题

python bug跟踪器上有几个问题是密切相关的(例如和),但它们现在已经关闭并解决为“已修复”


由于您使用的是非常旧的python版本(2.5),因此应该能够通过升级来解决问题。

解决方案

这是一个快速解决方案,我能够解决这个问题

import psutil, os

def kill_proc_tree(pid, including_parent=True):    
    parent = psutil.Process(pid)
    for child in parent.children(recursive=True):
        child.kill()
    if including_parent:
        parent.kill()


app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object.
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()


me = os.getpid()
kill_proc_tree(me)
导入psutil,操作系统
def kill_proc_树(pid,包括_parent=True):
父进程=psutil.Process(pid)
对于parent.children(recursive=True)中的子级:
child.kill()
如果包括家长:
parent.kill()
app=QtGui.QApplication(sys.argv)

MainWindow=QtGui.QMainWindow()#您尝试过以下方法吗

sys.exit(app.exec_)

这是PyQt开发人员的常见做法,也是干净地退出程序的简单方法。但是,您应该升级到Python2.7或Python3.3。

我使用Python2.5的原因是我使用scapy进行数据包捕获,但由于某些原因,它不支持Python2.7。否则我会喜欢使用Python2.7。@thecreator232。好的,这些修复不会被后端口到python-2.5,所以如果您想解决这个问题,您必须自己修复它。12540的问题是针对python3的,因此应该为您指出正确的方向。您应该将解决方案放在单独的答案中并接受它。