簡體   English   中英

Python腳本無法正常終止

[英]Python Script does not terminate properly

我有一個python腳本,我在終端上使用python main.py調用。 它啟動一個正確執行的Qt-GUI,並在關閉GUI時終止。

但是,有時會打印最后一條調試消息“over and out”,但腳本本身不會終止。 ctrl + cctrl + dctrl + 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 + cctrl + dctrl + 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

解決方案只是重新啟動我的系統。 不知何故,我的操作系統做了一些瘋狂的事情,並阻止腳本終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM