Python Script не завершается должным образом - PullRequest
4 голосов
/ 06 декабря 2011

У меня есть скрипт Python, который я вызываю, используя python main.py на моем терминале. Он запускает Qt-GUI, который выполняется правильно и завершается, когда я закрываю GUI.

Однако иногда печатается последнее отладочное сообщение "over and out", но сам скрипт не завершается. Ни ctrl + c , ctrl + d , ни ctrl + z не имеют влияние на исполнение. Мне кажется, что это происходит, когда в программе выдается исключение (и перехватывается графическим интерфейсом).

Я не знаю, как это отладить, поскольку, очевидно, это не происходит в самом графическом интерфейсе. Как мне отладить это и выяснить, что я сделал не так?

if __name__ == '__main__':
    import sys 

    app = QApplication(sys.argv)
    form = MainGui()
    form.show()
    app.exec_()
    print "over and out"

РЕДАКТИРОВАТЬ: Мне кажется, что какой-то поток еще активен в конце. Тем не менее, я не работаю явно с потоком (я не знаю, что делает Qt внутри ...) Есть ли способ просмотреть все запущенные потоки в конце?

РЕДАКТИРОВАТЬ 2: Боже мой. Решением было просто перезапустить мою систему. Каким-то образом моя ОС сделала несколько сумасшедших вещей и предотвратила завершение скрипта.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

"Ни 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
0 голосов
/ 09 декабря 2011

Решением было просто перезапустить мою систему.Каким-то образом моя ОС сделала несколько сумасшедших вещей и предотвратила завершение скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...