Heim >Backend-Entwicklung >Python-Tutorial >So beenden Sie Python durch Drücken einer beliebigen Taste unter Linux

So beenden Sie Python durch Drücken einer beliebigen Taste unter Linux

高洛峰
高洛峰Original
2017-02-24 15:48:312155Durchsuche

Eines Tages fragte ein Klassenkamerad in Python: Wenn ich Eingabe oder Raw_Input verwende, muss ich nach der Eingabe die Eingabetaste drücken, um den Eingabewert zu erhalten. Wie kann ich also Funktionen wie Beenden und Anhalten mit einer beliebigen Taste implementieren? ?Ich wusste es damals noch nicht, weil ich Python schon lange nicht mehr kennengelernt habe, hauptsächlich unter Linux.

Natürlich wird es unter Windows etwas einfacher sein. Wenn Sie die Python-Umgebung unter Windows installieren, heißt ein standardmäßig mitgeliefertes Modul msvcrt, importieren Sie msvcrt und rufen Sie dann msvcrt auf. getch() das ist Can. Der nächste Schritt besteht darin, die Python-Version unter Linux zu implementieren und zum Beenden eine beliebige Taste zu drücken.

Als ich Python zum ersten Mal lernte, wollte ich immer ein Programm implementieren, das zum Fortfahren/Beenden eine beliebige Taste drücken kann (vergiftet durch .bat), aber ich konnte es kürzlich nicht schreiben, als ich Unix lernte C, ich habe herausgefunden, dass es über die termios.h-Bibliothek implementiert werden kann, und habe festgestellt, dass Python auch über diese Bibliothek verfügt, also habe ich schließlich ein Programm wie dieses geschrieben:

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

Weitere Informationen zu Termios finden Sie im Linux-Handbuch:

man 3 termios

Fügen Sie außerdem das hinzu drei Modi des *nix-Terminals (Auszug aus faf32f0e53c0476f7f6a470ddd41023f)

Kanonischer Modus

Der kanonische Modus, auch gekochter Modus genannt, ist weit verbreitet Vom Fahrer eingegebene Zeichen werden im Puffer gespeichert und erst dann werden diese gepufferten Zeichen an das Programm gesendet. Die gepufferten Daten ermöglichen es dem Treiber, die grundlegendsten Bearbeitungsfunktionen auszuführen Die diesen Funktionen zugewiesenen Funktionen werden im Treiber festgelegt und können über den Befehl stty oder den Systemaufruf tcsetattr geändert werden

Nicht-kanonischer Modus

Wenn Pufferung und Bearbeitung aktiviert sind Wenn die Verbindung deaktiviert ist, wird die Verbindung in den nicht-kanonischen Modus versetzt. Der Terminalprozessor führt weiterhin bestimmte Zeichenverarbeitungen durch, z. B. die Verarbeitung von Strg-C und der Zeilenumbruchkonvertierung zwischen Symbolen. Die Bearbeitungstasten haben jedoch keine Bedeutung, sodass die entsprechende Eingabe als a behandelt wird normales Dateneingabeprogramm und muss die Bearbeitungsfunktion selbst implementieren

Rohmodus

Wenn die gesamte Verarbeitung ausgeschaltet ist, leitet der Treiber die Eingabe direkt an das Programm weiter. und die Verbindung wird im Rohmodus sein.

Die oben beschriebene Implementierungsmethode zum Beenden in Python wird Ihnen hoffentlich weiterhelfen Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte mich auch bei allen für Ihre Unterstützung auf der chinesischen PHP-Website bedanken!

Weitere verwandte Artikel zum Beenden von Python durch Drücken einer beliebigen Taste unter Linux finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn