Linux 下 Python 实现按任意键退出的实现方法


Posted in Python onSeptember 25, 2016

某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能呢,我当时也没有多想,因为接触python时间也不算长,主要还是Linux下的。

当然,Windows系统下会稍微简单一些,Windows系统下如果你安装了python的环境,默认自带的一个模块叫做msvcrt,import msvcrt,然后调用msvcrt.getch()即可。接下来即Linux下实现python版本的按任意键退出。

初学Python时在总想实现一个按任意键继续/退出的程序(受.bat毒害), 奈何一直写不出来, 最近学习Unix C时发现可以通过 termios.h 库来实现, 尝试一下发现Python也有这个库, 所以终于写出一个这样的程序. 下面是代码:

#!/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终端的三种模式(摘自<Unix-Linux编程实践教程>)

规范模式

规范模式, 也被成为cooked模式, 是用户常见的模式.驱动程序输入的字符保存在缓冲区, 并且仅在接收到回车键时才将这些缓冲的字符发送到程序.缓冲数据使驱动程序可以实现最基本的编辑功能, 被指派这些功能的特定键在驱动程序里设置, 可以通过命令stty或系统调用tcsetattr来修改

非规范模式

当缓冲和编辑功能被关闭时, 连接被成为非规范模式.终端处理器仍旧进行特定的字符处理, 例如处理Ctrl-C及换行符之间的转换, 但是编辑键将没有意义, 因此相应的输入被视为常规的数据输入 程序需要自己实现编辑功能

raw模式

当所有处理都被关闭后, 驱动程序将输入直接传递给程序, 连接被成为raw模式.

以上所述是小编给大家介绍的Linux 下 Python 实现按任意键退出的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python的装饰器用法学习笔记
Jun 24 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
python format 格式化输出方法
Jul 16 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
python打包生成so文件的实现
Oct 30 Python
利用Python为iOS10生成图标和截屏
Sep 24 #Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 #Python
Python 爬虫模拟登陆知乎
Sep 23 #Python
python 自动化将markdown文件转成html文件的方法
Sep 23 #Python
Python增量循环删除MySQL表数据的方法
Sep 23 #Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 #Python
Python 制作糗事百科爬虫实例
Sep 22 #Python
You might like
PHP 已经成熟
2006/12/04 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
一个用js实现的页内搜索代码
2007/05/23 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
python简单分割文件的方法
2015/07/30 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
保护环境建议书
2014/03/12 职场文书
四年级学生评语大全
2014/04/21 职场文书
小学班级口号
2014/06/09 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
Golang中异常处理机制详解
2021/06/08 Golang