Python脚本无法正常终止

时间:2011-12-06 16:28:50

标签: python debugging pyqt

我有一个python脚本,我在终端上使用python main.py调用。它启动一个正确执行的Qt-GUI,并在关闭GUI时终止。

但是,有时会打印最后一条调试消息“over and out”,但脚本本身不会终止。既不是 ctrl + c ctrl + d 也不是 ctrl + z 对执行有任何影响。在我看来,如果在程序中抛出异常(并被GUI捕获),就会发生这种情况。

我不知道如何调试它,因为它显然不会发生在GUI本身。我如何调试这个并找出我做错了什么?

if __name__ == '__main__':
    import sys 

    app = QApplication(sys.argv)
    form = MainGui()
    form.show()
    app.exec_()
    print "over and out"
编辑:在我看来好像最后还有一些线程仍处于活动状态。但是,我并没有真正使用线程(我不知道Qt在内部做什么......)。有没有办法在最后查看所有正在运行的线程?

EDIT2:哦,我的上帝。解决方案只是重新启动我的系统。不知何故,我的操作系统做了一些疯狂的事情,并阻止脚本终止。

2 个答案:

答案 0 :(得分:1)

“既不 ctrl + c ctrl + d 也不 ctrl + z 对执行产生任何影响。“

将这些代码行添加到程序的标题中, ctrl + c 将退出。

import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)

如果您想在程序遇到异常时自动进入pdb调试器,请执行以下操作:

import sys

def excepthook(type_, value, tb):
    import pdb
    import traceback

    # print the exception...
    traceback.print_exception(type_, value, tb)
    print
    # ...then start the debugger in post-mortem mode
    pdb.pm()

# we are NOT in interactive mode
if not hasattr(sys, 'ps1') or sys.stderr.target.isatty():
    # this stops PyQt from freezing the terminal
    from PyQt4.QtCore import pyqtRemoveInputHook
    pyqtRemoveInputHook()

    sys.excepthook = excepthook

答案 1 :(得分:0)

解决方案只是重新启动我的系统。不知何故,我的操作系统做了一些疯狂的事情,并阻止脚本终止。