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编写分析Python程序性能的工具的教程
Apr 01 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
python requests使用socks5的例子
Jul 25 Python
python实现超级玛丽游戏
Mar 18 Python
python中元组的用法整理
Jun 15 Python
python 使用建议与技巧分享(四)
Aug 18 Python
Python -m参数原理及使用方法解析
Aug 21 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
python中pandas对多列进行分组统计的实现
Jun 18 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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清除和销毁session的方法分析
2015/03/19 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python实现ID3决策树算法
2018/08/29 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
实习自我鉴定范文
2013/10/30 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
争先创优演讲稿
2014/09/15 职场文书
纪录片信仰观后感
2015/06/08 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
Python字典和列表性能之间的比较
2021/06/07 Python
python运行脚本文件的三种方法实例
2022/06/25 Python