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之永远强大的函数
Sep 14 Python
Python通过poll实现异步IO的方法
Jun 04 Python
python利用正则表达式提取字符串
Dec 08 Python
深入理解Django中内置的用户认证
Oct 06 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
Django封装交互接口代码
Jul 12 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
Python 文本滚动播放器的实现代码
Apr 25 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&amp;mysql 日期操作小记
2012/02/27 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
Python os模块学习笔记
2015/06/21 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
关于numpy数组轴的使用详解
2019/12/05 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
PHP面试题-$message和$$message的区别
2015/12/08 面试题
自主招生自荐信格式
2013/12/03 职场文书
法律进企业活动方案
2014/03/04 职场文书
学习经验演讲稿
2014/05/10 职场文书
幼师求职信
2014/06/23 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
奖励申请报告范文
2015/05/15 职场文书
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB