#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…