我有一个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:哦,我的上帝。解决方案只是重新启动我的系统。不知何故,我的操作系统做了一些疯狂的事情,并阻止脚本终止。
答案 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)
解决方案只是重新启动我的系统。不知何故,我的操作系统做了一些疯狂的事情,并阻止脚本终止。