加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python脚本无法正常终止

发布时间:2020-12-20 13:25:38 所属栏目:Python 来源:网络整理
导读:我有一个 python脚本,我在终端上使用python main.py调用.它启动一个正确执行的Qt-GUI,并在关闭GUI时终止. 但是,有时会打印最后一条调试消息“over and out”,但脚本本身不会终止. ctrl c,ctrl d和ctrl z都不会对执行产生任何影响.在我看来,如果在程序内部抛
我有一个 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在内部做什么……).有没有办法在最后查看所有正在运行的线程?

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

解决方法

“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_,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读