最初に私は呪いを使った解決策があることを知っていると言いたいです。
私のプログラムは毎回実行されるwhileループです。第二。毎秒私は最後に押された、または押されたキーを取得したいのです。ループがスリープしている間にキーを押した場合は、キーが保存されていることを望みます。保存したキーを取得した後に「削除」したくない。ユーザーが "a"キーを押したとき、私は彼が別のキーを押すまで毎秒それを取得したいです。特定のキーが押された場合、私はテキストを印刷したいです。このテキスト私は標準出力のリダイレクトを使用してファイルに書き込みたいです。
./test.py > file.txt
私のpythonプログラムは呪いを解いてこのように見えます:
import curses
from time import sleep
stdscr=curses.initscr()
stdscr.nodelay(1)
curses.noecho()
curses.cbreak()
while True:
char=stdscr.getch()
if char == 111: #111 = "o" key
print("test")
break
elif char == 97 #97 = "a" key
#code that have to be run every second
#if the a key is the last pressed key!
sleep(1)
curses.nocbreak()
curses.echo()
curses.endwin()
この解決策に関する問題は、cursesが私にクレイジーな出力を与えるということです。私は一度だけ "o"キーを押すだけで、プログラムが停止した後file.txtは次のようになります。
^[[?1049h^[[1;30r^[(B^[[m^[[4l^[[?7h^[[H^[[2Jtest
^[[30;1H^[[?1049l^M^[[?1l^[>
しかし、それはこのように見えるはずです:
test
誰かが答えを書いたら私はとても嬉しいです。私は、Pythonがキー押下イベントを使うプログラムにとって最良の選択ではないことを知っています。しかし私はなぜ私がこれにpythonを使うのかの理由があります。
ご回答ありがとうございます。
回答:
回答№1は2あなたがインストールして使用することができます getch
パッケージ。
import getch
from time import sleep
while True:
char = getch.getch()
if char == 111:
print("test")
break
sleep(1)
(あなたが使用する必要があるかもしれません getch.getche
の代わりに getch.getch
。それはあなたの質問から完全には明らかではありません)