ホームページ バックエンド開発 Python チュートリアル Pythonは任意のキーを押して続行/終了する機能を実装します

Pythonは任意のキーを押して続行/終了する機能を実装します

Feb 25, 2017 am 10:41 AM

はじめに

この関数を実装するには、プログラムを一時停止し、ユーザーからのキーボード入力を待ってキャプチャし、実行を続行するだけです。 Python にはこの関数の実装に役立つ組み込みライブラリがありますが、Windows と Linux では別の方法で扱う必要があります。

msvcrt getch() メソッドは、キー応答を取得し、対応する文字を返す機能を Windows で実装するのに役立ちます。コマンドラインにはエコーされません。次のプログラム セグメントがあります: msvcrt 中的 getch() 方法 能够帮助在 Windows 下实现,其作用是获取一个按键响应并返回对应的字符。它并不在命令行中回显。有如下程序段:

import msvcrt
print ord(msvcrt.getch())
ログイン後にコピー

这里利用 ord 将获得的字符转换为 ASCII 数值,例如捕获按键“d”(注意是小写)将得到数值100。

Linux 下呢?嗯,相对复杂一点点,不过先理清思路的话就好办了。

首先要知晓一下 Linux 终端的三种模式,分别为规范模式非规范模式 raw 模式

规范模式

规范模式,也被成为 cooked 模式,是用户常见的模式。驱动程序输入的字符保存在缓冲区,并且仅在接收到回车键时才将这些缓冲的字符发送到程序。缓冲数据使驱动程序可以实现最基本的编辑功能, 被指派这些功能的特定键在驱动程序里设置,可以通过命令 stty 或系统调用 tcsetattr 来修改。

非规范模式

当缓冲和编辑功能被关闭时,连接被成为非规范模式。终端处理器仍旧进行特定的字符处理,例如处理 Ctrl-C 及换行符之间的转换,但是编辑键将没有意义,因此相应的输入被视为常规的数据输入,程序需要自己实现编辑功能。

raw 模式

当所有处理都被关闭后,驱动程序将输入直接传递给程序,连接被成为 raw

import os
import termios
 
# 获取标准输入的描述符
fd = sys.stdin.fileno()
 
# 获取标准输入(终端)的设置
old_ttyinfo = termios.tcgetattr(fd)
 
# 配置终端
new_ttyinfo = old_ttyinfo[:]
 
# 使用非规范模式(索引3是c_lflag 也就是本地模式)
new_ttyinfo[3] &= ~termios.ICANON
 
# 关闭回显(输入不会被显示)
new_ttyinfo[3] &= ~termios.ECHO
 
# 使设置生效
termios.tcsetattr(fd, termios.TCSANOW, new_ttyinfo)
 
# 从终端读取
print ord(os.read(fd, 7))
ログイン後にコピー

ここでは、ord を使用して、取得した文字を ASCII 値に変換します。たとえば、キャプチャ キー "d" です。 (小文字であることに注意してください) 値 100 が取得されます。

Linux?そうですね、少し複雑ですが、最初に自分の考えを明確にしておくと簡単になります。

まず、Linux ターミナルの 3 つのモード、正規モード

非正規モード

、および未加工モード

について知っておく必要があります。

正規モード

正規モード。クック モードとも呼ばれ、ユーザー間で共通のモードです。ドライバーによって入力された文字はバッファーに保存され、これらのバッファーされた文字は Enter キーが受信されたときにのみプログラムに送信されます。バッファされたデータにより、ドライバーは最も基本的な編集機能を実装できます。これらの機能に割り当てられた特定のキーはドライバー内で設定され、コマンド stty またはシステム コール tcsetattr </ を介して変更できます。コード> 。 🎜🎜<strong>非正規モード 🎜🎜🎜 バッファリングと編集がオフになると、接続は非正規モードになります。端末プロセッサは、Ctrl-C と改行文字間の変換の処理など、特定の文字処理を実行しますが、編集キーは意味を持たないため、対応する入力は通常のデータ入力として扱われ、プログラムは編集機能を実装する必要があります。自体。 🎜🎜<strong>raw モード 🎜🎜🎜 すべての処理がオフになり、ドライバーが入力をプログラムに直接渡す場合、接続は <code>raw モードと呼ばれます。 🎜🎜ここでは非正規モードに頼る必要があるため、Windows で同様の動作を実現するには、次のコードが必要です: 🎜🎜🎜
import msvcrt
 
print("Press &#39;D&#39; to exit...")
 
while True:
 if ord(msvcrt.getch()) in [68, 100]:
  break
ログイン後にコピー
🎜🎜🎜 この観点からは、上記のメソッドを使用するだけで済みます。をクリックしてキーの応答をキャプチャし、プログラムを続行すると、任意のキーを押して続行または終了できます。もちろん、指定したキーを押して続行または終了する機能も同様の方法で実装できます。例: 🎜🎜🎜rrreee🎜🎜🎜 このように、ユーザーが「D」または「d」を押すと、プログラムが終了します。 🎜🎜任意のキーを押して続行/終了する Python の機能に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。 🎜
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles