Я планирую внедрить библиотеку curses в существующий скрипт Python для клиента.Сценарий будет запускаться исключительно через SSH.
В настоящее время я пытаюсь смоделировать некоторые выходные данные, которые сгенерирует мой сценарий.
В моем сценарии «тестирования на воде» у меня 3переменные: x, y, z.
У меня есть поток, работающий вдоль цикла curses, который увеличивает x, y и z каждые x секунд.В цикле я просто печатаю три переменные на экране терминала.
Проблема : Переменные не обновляются, пока я не предоставлю какой-либо ввод. Как я могу заставить строку терминала автоматически обновлять значения?
Я проверяю это на Терминале в Kubuntu.Я попробовал Urwid и столкнулся с подобной проблемой.
import curses
import time
from threading import Thread
x, y, z = 0, 0, 0
go = True
def increment_ints():
global x, y, z
while go:
x += 1
y += 2
z += 3
time.sleep(3)
def main(screen):
global go
curses.initscr()
screen.clear()
while go:
screen.addstr(0, 0, f"x: {x}, y = {y}, z = {z}")
c = screen.getch()
if c == ord('q'):
go = False
if __name__ == '__main__':
t = Thread(target=update_ints)
t.setDaemon(True)
t.start()
curses.wrapper(main)
Ожидается : значения x, y и z отображаются и отражают приращения без ввода.
Фактические результаты : значения x, y и z остаются 1, 2 и 3 соответственно и обновляются только при нажатии клавиши.
----------- Редактировать: Это работает, как и ожидалось:
import curses
import time
from threading import Thread
x, y, z = 0, 0, 0
go = True
def update_ints():
global x, y, z
x += 1
y += 2
z += 3
def main(screen):
global go
curses.initscr()
screen.clear()
while go:
update_ints()
screen.addstr(0, 0, f"x: {x}, y = {y}, z = {z}")
c = screen.getch()
if c == ord('q'):
go = False
time.sleep(3)
if __name__ == '__main__':
curses.wrapper(main)
Но мне понадобится обновить значения из потока.