Оболочка RaspberryPi заморожена после Python-проклятий (Ctrl-C)

#python #terminal #raspberry-pi #curses

#python #терминал #raspberry-pi #проклятия

Вопрос:

У меня есть небольшое приложение на Python, которое выдает мне некоторые результаты с помощью простых проклятий. Я хочу, чтобы это приложение запускалось до тех пор, пока пользователь не нажмет определенную кнопку. В прошлом я просто использовал Ctrl-C, чтобы выйти из своего приложения. И на самом деле, это все еще работает и здесь, но, видимо, я не могу получить какие-либо входные данные в свой терминал после выхода (кроме KeyboardInterrupt).

Я попытался перехватить исключение и сбросить настройки проклятий и некоторые другие вещи. Я не могу протестировать исходное приложение на своем Mac, потому что оно использует контакты GPIO, но приведенный ниже скрипт работает на моем Mac, и после выхода с помощью Ctrl-C все в порядке. Однако на Pi это вызывает то же самое поведение.

Заранее спасибо 🙂

 import time
import curses
import threading
import random
            
class SomeOutputtingThing:
    
    def start(self):
        self.running = True
        threading.Thread(target=self.show_values, daemon=True).start()
    
    def stop(self):
        self.running = False
        
    def show_values(self):
    
        stdscr = curses.initscr()
        curses.noecho()
        curses.cbreak()
        
        try:
            while self.running:
                stdscr.addstr(0,0, "Some valuable Data i want to see: {}".format(random.randint(0,5)))
                stdscr.addstr(1,0, "Some valuable Data i want to see: {}".format(random.randint(0,5)))
                stdscr.refresh()
        finally:
            curses.echo()
            curses.nocbreak()
            curses.endwin()

if __name__ == "__main__":

    foo = SomeOutputtingThing()
    foo.start()
    time.sleep(15)
    foo.stop()
 

Комментарии:

1. python не восстанавливает режимы терминала при аварийном выходе. Возможно, вы сможете использовать stty sane (заканчивая это элементом управления / J)

2. @ThomasDickey спасибо за ваш ответ, попробую завтра — я все еще не понимаю, почему это не проблема на Mac, а на pi

3. Трудно выполнить правильный поиск, чтобы привести примеры, но я не понимаю, почему он должен работать лучше на Mac…