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去除字符串中的换行符
Oct 11 Python
Python实现句子翻译功能
Nov 14 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Python接口开发实现步骤详解
Apr 26 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Python中requests做接口测试的方法
May 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以及MYSQL日期比较方法
2012/11/29 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
js截取函数(indexOf,join等)
2010/09/01 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python Merge函数原理及用法解析
2020/09/16 Python
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
晚宴邀请函范文
2014/01/15 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
年会搞笑主持词
2014/03/27 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
云台山导游词
2015/02/03 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书