머리말
이 기능을 구현하려면 프로그램을 일시 중지하고 기다렸다가 사용자의 키보드 입력을 캡처한 다음 실행을 계속하면 됩니다. Python에는 이 기능을 구현하는 데 도움이 되는 내장 라이브러리가 있지만 Windows와 Linux는 다르게 취급해야 합니다.
msvcrt
의 getch()
메서드는 Windows에서 이를 구현하는 데 도움이 될 수 있습니다. 해당 기능은 키 응답을 얻고 해당 문자를 반환하는 것입니다. 명령줄에서는 에코되지 않습니다. 다음과 같은 프로그램 세그먼트가 있습니다:
import msvcrt print ord(msvcrt.getch())
여기서 ord
는 획득한 문자를 키 캡처와 같은 ASCII
숫자 값으로 변환하는 데 사용됩니다. "d"(소문자임에 유의)는 값 100을 얻습니다.
리눅스는 어떻습니까? 글쎄요, 조금 복잡하지만 먼저 생각을 명확하게 하면 더 쉬울 거예요.
먼저 Linux 터미널의 세 가지 모드인 표준 모드, 비표준 모드, raw 모드<🎜를 알아야 합니다. >:
일반 모드
일반 모드, 일명 모드는 사용자들이 흔히 사용하는 모드입니다. 드라이버가 입력한 문자는 버퍼에 저장되며, 이러한 버퍼링된 문자는 Enter 키를 수신할 때만 프로그램으로 전송됩니다. 버퍼링된 데이터를 사용하면 드라이버가 가장 기본적인 편집 기능을 구현할 수 있습니다. 이러한 기능에 할당된 특정 키는 드라이버에 설정되며 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))
import msvcrt print("Press 'D' to exit...") while True: if ord(msvcrt.getch()) in [68, 100]: break