Maison >développement back-end >Tutoriel Python >Comment quitter Python en appuyant sur n'importe quelle touche sous Linux

Comment quitter Python en appuyant sur n'importe quelle touche sous Linux

高洛峰
高洛峰original
2017-02-24 15:48:312154parcourir

Un jour dans le groupe, un camarade de classe m'a demandé, en Python, lorsque j'utilise input ou raw_input, je dois appuyer sur Entrée après la saisie pour obtenir la valeur d'entrée. Alors, comment puis-je implémenter des fonctions telles que quitter et mettre en pause avec n'importe quelle touche. ? Je ne le savais pas à l'époque. Réfléchissez-y davantage, car je n'ai pas été exposé à python depuis longtemps, principalement sous Linux.

Bien sûr, ce sera légèrement plus simple sous le système Windows. Si vous installez l'environnement python sous le système Windows, un module qui l'accompagne par défaut s'appelle msvcrt, import msvcrt, puis. appelez msvcrt.getch() qui est Can. L'étape suivante consiste à implémenter la version python sous Linux pour appuyer sur n'importe quelle touche pour quitter.

Quand j'ai appris Python pour la première fois, j'ai toujours voulu implémenter un programme capable d'appuyer sur n'importe quelle touche pour continuer/sortir (empoisonné par .bat), mais je n'ai pas pu l'écrire récemment, lorsque j'apprenais Unix. C, j'ai trouvé qu'il pouvait être implémenté via la bibliothèque termios.h. Je l'ai essayé et j'ai découvert que Python avait également cette bibliothèque, alors j'ai finalement écrit un programme comme celui-ci. Voici le code :

<.>

#!/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("按任意键退出...")

Pour d'autres informations sur termios, veuillez vous référer au manuel Linux :

man 3 termios

Ajoutez également le trois modes du terminal *nix (extrait du 3d428d810e5acd9ea8f8b41cdec180ef)

Mode canonique

Le mode canonique, également appelé mode cuit, est un mode courant mode pour les utilisateurs. Les caractères saisis par le pilote sont enregistrés dans la mémoire tampon, et seulement lorsque la touche Entrée est reçue. Ce n'est qu'alors que ces caractères mis en mémoire tampon sont envoyés au programme. Les données mises en mémoire tampon permettent au pilote de mettre en œuvre les fonctions d'édition les plus élémentaires. attribués à ces fonctions sont définis dans le pilote et peuvent être modifiés via la commande stty ou l'appel système tcsetattr

Mode non canonique

Lorsque la mise en mémoire tampon et l'édition sont activées désactivé, la connexion est mise en mode non canonique. Le processeur du terminal effectue toujours un traitement de caractères spécifique, tel que la gestion de Ctrl-C et la conversion de nouvelle ligne entre les symboles, mais les touches d'édition n'auront aucune signification, donc l'entrée correspondante est traitée comme une entrée. programme de saisie de données régulier et doit implémenter la fonction d'édition elle-même

mode brut

Lorsque tout le traitement est désactivé, le pilote transmettra l'entrée directement au programme, et la connexion se fera en mode brut.

Ce qui précède est la méthode d'implémentation présentée par l'éditeur pour appuyer sur n'importe quelle touche pour quitter en Python sous Linux, j'espère que cela vous sera utile si vous l'avez. Si vous avez des questions, laissez-moi un message et l'éditeur vous répondra à temps. Je tiens également à vous remercier tous pour votre soutien sur le site PHP chinois !

Pour plus d'articles sur la façon de quitter Python en appuyant sur n'importe quelle touche sous Linux, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn