Python
1sys.stdout.write('\033[2h') 2time.sleep(3) 3sys.stdout.write('\033[2l')
sleep中のキー入力を無視(禁止)したいのですが、このコードではだめでした。何が問題なのでしょうか?
このコードだと、sleep中に入力した文字は表示され、さらに割り込みとして次のプロンプトに自動入力されてしまいます。どちらも阻止したいです。
回答2件
あなたの回答
tips
プレビュー
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。
エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。
文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。
Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。
エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。
文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。
Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
0グッド
2クリップ
投稿2021/03/31 10:23
Python
1sys.stdout.write('\033[2h') 2time.sleep(3) 3sys.stdout.write('\033[2l')
sleep中のキー入力を無視(禁止)したいのですが、このコードではだめでした。何が問題なのでしょうか?
このコードだと、sleep中に入力した文字は表示され、さらに割り込みとして次のプロンプトに自動入力されてしまいます。どちらも阻止したいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
まず。エスケープシーケンスってのは何に効くのかというと、端末装置です。まぁ、いまどきは「プログラム」になってしまっているでしょうけれど。エスケープシーケンスが効くかどうかは端末がそのエスケープシーケンスに対応しているかどうか次第。あなたが使っている端末プログラムはそのエスケープシーケンスに対応しているのですか? (私はそのシーケンスを知りませんが...ちょっと調べても出てこないなぁ...)
端末装置に入力を停止するシーケンスがあるとは限らないので、次の入力を始めるまえに標準入力のバッファをクリアしちゃう、という手段が使われます。Cだと(非標準だけど大抵使える)fflush(stdin);
なんですが...pythonだと、termios.tcflush(stdin,TCIFLUSH)となるのかな。私は使ったことはないですけれど。
投稿2021/03/31 11:40
総合スコア7703
0
特定の時間キーを無視して、標準出力に表示しないプログラムを作成しました。
意図があっているのであれば、参照して見てください!
python3
1import sys 2import termios 3import time 4import sys, select 5 6 7def sleep_ignore_key(sec): 8 fd = sys.stdin.fileno() 9 old = termios.tcgetattr(fd) 10 new = termios.tcgetattr(fd) 11 new[3] &= ~termios.ICANON 12 new[3] &= ~termios.ECHO 13 14 15 termios.tcsetattr(fd, termios.TCSANOW, new) 16 17 18 now_time = time.time() 19 while(1): 20 (r, w, e) = select.select([sys.stdin],[], [], 0) 21 if (len(r) == 1): 22 ch = sys.stdin.read(1) 23 24 end_time = time.time() 25 if (now_time + 3 < end_time): 26 break 27 28 29 30 termios.tcsetattr(fd, termios.TCSANOW, old) 31 32 33sleep_ignore_key(3) 34 35 36
こちらの記事を参考にしました。
投稿2021/03/31 13:46
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/31 11:56
2021/03/31 12:07
2021/03/31 12:09
2021/03/31 12:13
2021/03/31 12:26
2021/03/31 12:43
2021/03/31 12:59
2021/03/31 13:13 編集
2021/03/31 13:19
2021/03/31 13:32
2021/03/31 23:16
2021/04/01 03:31