1
我想做一個python腳本,它接受來自stdin的輸入,在終端中使用curses顯示GUI,然後當用戶完成交互時,將結果輸出到stdout。這種行爲的好例子是selecta,但它是用紅寶石書寫的。如何從stdin獲取輸入,使用curses顯示某些內容並輸出到stdout?
我不能讓curses顯示任何東西。這是最小的(只顯示一個字符一個字符和等待),例如什麼我試過到目前爲止:
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,如果是的話如何做到這一點?
哦,是的,這是一個錯誤,我當我被簡化的例子進行,但恐怕這是不相關的,或者至少有一個更大的問題:curses output('s.addch(ord('a'))')不會顯示,這應該在s.getch()'的結果打印之前發生。不過,我修復了代碼,謝謝。 –