私はstdinから入力を受け取り、cursesを使って端末にGUIを表示し、ユーザーがインタラクションを終了すると結果をstdoutに出力するpythonスクリプトを作ろうとしています。この動作の良い例はselectaですが、それはrubyで書かれています。stdinから入力を取得する方法、cursesを使用して何かを表示してstdoutに出力する方法はありますか?
cursesに何も表示させることはできません。これは、(それが唯一の1つの文字を1つの文字と待機を表示する)私がこれまで試したものの一例最小限である:
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()'の結果が出力される前に発生します。それにもかかわらず、コードを修正しました。 –