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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
python中rc1什么意思
Jun 19 Python
python cookie反爬处理的实现
Nov 01 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 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
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
JS远程获取网页源代码实例
2013/09/05 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
简洁的十分钟Python入门教程
2015/04/03 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
简单谈谈Python中的闭包
2016/11/30 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
大学学习生活感言
2014/01/18 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
公司会议策划方案
2014/05/17 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
药店采购员岗位职责
2014/09/30 职场文书
手机被没收的检讨书
2014/10/04 职场文书
死亡证明书样本说明
2014/10/18 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
2015年社区服务活动总结
2015/03/25 职场文书