macを使っています。
#やりたいこと
ターミナル上でEnterキーを押さずに入力する
#問題点
sys.stdlin.read(1)
を処理するとそれより前に出力されていた文字が消えてしまうのでそうならないような方法が知りたいです。(他の部分で問題点があるのかもしれませんが、おそらくここではないかと思っています。)
例えば、ターミナル画面で、
key :[コンソール]
と出力しているつもりが、sys.stdlin.read(1) という処理をすることで上書き?されてしまい、
[コンソール]
となって、"key :"が表示されません。この時点でキー(例えばa)を一つ打つと
key : a
となって隠れていた"key :" の部分がここで現れます。
この"key :"が消える現象をなくす方法はありますか?
よろしくお願いいたします。
#コードなど
ネットで調べてみると以下のようにgetch()関数を作るとEnterキーなしで入力できることがわかりました。実際できています。
Python3
1import sys 2def getch(): 3 import tty 4 import termios 5# 標準入力のファイルディスクリプタを取得 6 fd = sys.stdin.fileno() 7# fd の端末属性を取得 8 old = termios.tcgetattr(fd) 9 try: 10 tty.setraw(fd) 11 return sys.stdin.read(1) 12 finally: 13# fd の属性を戻す 14 termios.tcsetattr(fd, termios.TCSADRAIN, old) 15 16 17# Unicodeを調べる 18while True: 19 print('key = ', end='') #<- ここが表示できない 20 key = getch() 21 print(key ,end='') 22 if key == chr(27) or key == '': 23 print('done') 24 break 25 print('\t: ',ord(key)) 26 27
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/11 16:38
2020/05/11 16:49
2020/05/11 23:31
2020/05/13 02:05
2020/05/13 02:49