>백엔드 개발 >파이썬 튜토리얼 >Python은 계속/종료하려면 아무 키나 누르는 기능을 구현합니다.

Python은 계속/종료하려면 아무 키나 누르는 기능을 구현합니다.

高洛峰
高洛峰원래의
2017-02-25 10:41:2310355검색

머리말

이 기능을 구현하려면 프로그램을 일시 중지하고 기다렸다가 사용자의 키보드 입력을 캡처한 다음 실행을 계속하면 됩니다. 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

여기서는 비정규 모드를 사용해야 하므로 지금 Windows에서 유사한 동작을 달성하려면 다음 코드가 필요합니다.

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

이렇게 하면 사용자가 "D" 또는 "d"를 누르면 프로그램이 종료됩니다.

계속/종료를 위해 아무 키나 누르는 기능에 대한 더 많은 Python 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.