Linuxの下でPythonは任意のキーを押して退出することを実現します

6610 ワード

ある日グループ内でpythonの下でinputかrawでinputはすべて入力した后に车に戻ってやっと入力の値を得ることができて、それではどのように任意のキーの退出の暂时停止などの机能を実现して、私はその时あまり考えていませんて、pythonに接触する时间も长くありませんため、googleはちょっとして、意外にも1人の友达のブログの中で探し当てて、ここで転載して、しかし主にlinuxの下です.
もちろん、windowsシステムの下では少し簡単ですが、windowsシステムの下でpythonの環境をインストールした場合、デフォルトで持参したモジュールはmsvcrt、import msvcrtと呼ばれ、msvcrtを呼び出します.getch()でいいです.次に、Linuxの下でpythonバージョンの任意のキーを押して終了する原文を転載します.以下は文章の内容で、原文のアドレスは次のとおりです.http://www.linuxzen.com/linux-xia-python-shi-xian-an-ren-yi-jian-tui-chu.html、転載を歓迎して、オリジナルを尊重してください!
初めてPythonを学んだ时、いつも1つの任意のキーを押して継続/退出するプログラム(batの毒害を受けます)を実现したいと思って、どうしてずっと书けないで、最近Unix Cを学ぶ时termios.hライブラリを通じて実现することができることを発见して、试みてPythonもこのライブラリがあることを発见して、だからついに1つのこのようなプログラムを书きます.コードは次のとおりです.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import sys
import termios


def press_any_key_exit(msg):
    #           
    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

    #     
    sys.stdout.write(msg)
    sys.stdout.flush()
    #      
    termios.tcsetattr(fd, termios.TCSANOW, new_ttyinfo)
    #      
    os.read(fd, 7)

    #       
    termios.tcsetattr(fd, termios.TCSANOW, old_ttyinfo)


if __name__ == "__main__":
    press_any_key_exit("      ...")
    press_any_key_exit("      ...")

その他のtermiosに関する情報はLinuxマニュアルを参照してください.
man 3 termios

*nix端末の3つのモードを追加します(抜粋)
仕様モード
規範モードは、cookedモードともなる、ユーザによく見られるモードである.ドライバが入力文字はバッファに保存され、これらのバッファの文字は、リターンキーを受信したときにのみプログラムに送信.バッファデータはドライバに最も基本的な編集機能を実現させ、これらの機能の特定のキーをドライバに割り当てて設定し、コマンドsttyやシステム呼び出しtcsetattrで変更することができます.
非仕様モード
バッファおよび編集機能がオフになると、接続は非正規モードとなる.端末プロセッサは、Ctrl-Cや改行文字の変換などの特定の文字処理を行うが、編集キーは意味がないため、対応する入力は従来のデータ入力プログラムが自分で編集機能を実現する必要があると見なされる
rawモード
全ての処理が閉じると、ドライバは入力をプログラムに直接伝達し、接続はrawモードとなる.