Я пытаюсь создать скрипт python, который принимает входные данные от stdin, отображает GUI в терминале, используя curses, а затем, когда пользователь заканчивает взаимодействие, выводит результат на stdout. Хорошим примером такого поведения является selecta, но он написан на рубине.Как взять ввод из stdin, отобразить что-то, используя проклятия и вывести на stdout?
Я не могу заставить проклятия показывать что-либо. Это минимальный (он отображает только один символ и ждет одного символа) пример того, что я пытался до сих пор:
import os, sys
import curses
c = None
old_out = sys.__stdout__
old_in = sys.__stdin__
old_err = sys.__stderr__
sys.__stdout__ = sys.stdout = open('/dev/tty', 'w')
sys.__stdin__ = sys.stdin = open('/dev/tty')
sys.__stderr__ = sys.stderr = open('/dev/tty')
def show_a(s):
global c
s.addch(ord('a'))
c = s.getch()
curses.wrapper(show_a)
sys.stdin.flush()
sys.stdout.flush()
sys.stderr.flush()
sys.stdin.close()
sys.stdout.close()
sys.stderr.close()
sys.__stdout__ = sys.stdout = old_out
sys.__stdin__ = sys.stdin = old_in
sys.__stderr__ = sys.stderr = old_err
print(c)
Когда я пытаюсь не использовать echo $(python3 show_a.py)
ничего не отображается, но после нажатия любой клавиши ее номер отображается:
ли что-то подобное возможно даже с помощью проклятий, если это так, как это сделать?
О, да, это ошибка, которую я сделал, когда я был упрощая пример, но я боюсь, что это не имеет значения или, по крайней мере, есть большая проблема : вывод curses ('s.addch (ord ('a'))') не отображается, и это должно произойти до того, как будет напечатан результат 's.getch()'. Тем не менее, я исправил код, спасибо. –