Терминал в неисправном состоянии (невидимый текст/нет эха) после выхода() во время ввода()/raw_input()Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Терминал в неисправном состоянии (невидимый текст/нет эха) после выхода() во время ввода()/raw_input()

Сообщение Anonymous »

Я пишу небольшое служебное приложение, используя Python 3 (однако приведенный ниже тестовый пример также работает и в Python 2) и PyQt 4, которое использует модуль code для создания приглашения REPL, позволяющего взаимодействовать с окном Qt. .

К сожалению, я столкнулся с проблемой, которую не смог решить: когда я выхожу() из приложения, пока код находится внутри 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()
Для тех, кто не знаком с (Py)Qt, откроется пустое окно, а когда оно закроется, соединение из приложения's LastWindowClosed

code> вызовет встроенную функцию exit(). Это происходит, когда модуль code выполняет вызов input() для чтения из sys.stdin. И здесь, когда я закрываю окно, при последующем вводе текста в терминал не отображаются никакие символы типов.

Я в основном использую Python 3, и фактический приложение использует код, специфичный для Python 3, но я попробовал тестовый пример и в Python 2.7, и он обнаружил ту же проблему.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ring-input
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»