К сожалению, я столкнулся с проблемой, которую не смог решить: когда я выхожу() из приложения, пока код находится внутри input() (известный как raw_input() в Python 2.x), мой терминал Linux впоследствии больше не отображает введенные символы. Т.е. терминал, похоже, остался в неисправном состоянии, предположительно из-за какой-то escape-последовательности, выданной input().
Я пробовал различные подходы чтобы исправить это, можно использовать модуль проклятий и другие средства для сброса терминала перед запуском выхода, а также пытаться эмулировать поток stdin для выхода, фактически выполнив команду exit() в input() (к сожалению, code.InteractiveConsole.push() не работает таким образом, как можно было бы подумать), до попытки написать свой собственный неблокирующий input() с помощью threading, но мне не удалось собрать что-то работающее.
Здесь, здесь, здесь и здесь обсуждаются похожие проблемы.
Наконец, вот сокращенный тестовый пример, демонстрирующий проблему:
Код: Выделить всё
#!/usr/bin/env python3
import code
import sys
from PyQt4.QtGui import QApplication, QWidget
app = QApplication(sys.argv)
app.lastWindowClosed.connect(exit)
widget = QWidget()
widget.show()
code.interact()
code> вызовет встроенную функцию exit(). Это происходит, когда модуль code выполняет вызов input() для чтения из sys.stdin. И здесь, когда я закрываю окно, при последующем вводе текста в терминал не отображаются никакие символы типов.
Я в основном использую Python 3, и фактический приложение использует код, специфичный для Python 3, но я попробовал тестовый пример и в Python 2.7, и он обнаружил ту же проблему.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ring-input