很久很久以前,系windows平台下,用C语言写过一款贪食蛇游戏,cmd界面,用kbhit()函数实现非阻塞输入。系windows平台下用python依然可以调用msvcrt.khbit实现非阻塞监听。但系喺linux下面就冇呢支歌仔唱。

随手google咗一下,基本上都用select实现非阻塞监听,但问题是,监听的是用select之后是不能像getchar()那样,即时收到单个字符的输入,必须要等待回车。

经过努力不怠咁google... [好吧,还是google。没有google什么也做不了。]

最后系一大堆英文资料入面,拼凑出如下可用的代码,实现了单个字符非阻塞输入。

show code below.

#!/usr/bin/python
# -*- coding: utf-8 -*-
""" python non blocking input
"""
__author__ = 'Zagfai'
__version__= '2013-09-13' import sys
import select
from time import sleep
import termios
import tty old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
while True:
sleep(.001)
if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
c = sys.stdin.read(1)
if c == '\x1b': break
sys.stdout.write(c)
sys.stdout.flush()
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) print raw_input('123:')

其中用到两个模块,分别系termios、tty,用来控制tty的输入模式,由行输入变为单字符。

END.

最新文章

  1. 【Win 10 应用开发】透视效果
  2. BZOJ 3827: [Poi2014]Around the world
  3. 2015年9月10-11日,杨学明老师《IPD DRY RUN》专题培训在武汉某上市企业成功举办!
  4. [hive小技巧]同一份数据多种处理
  5. Android测试AsyncTask下载图片
  6. 如何正确看待Linq的DistinctBy扩展和ForEach扩展
  7. 用JAX-WS在Tomcat中公布WebService
  8. linux内核学习-建议路线
  9. UVA 562 Dividing coins (01背包)
  10. 使用Nginx实现灰度发布
  11. ERP-非财务人员的财务培训教(四)------公司/部门的成本与费用控制
  12. 【1】学习C++时,一些零散知识点01
  13. mysql 语法积累
  14. 微服务SpringCloud容器化案例
  15. 更改mysql 数据目录
  16. RabbitMQ 消费消息
  17. 雷林鹏分享:XML 命名空间
  18. PAT 1019 General Palindromic Number
  19. cancel_delayed_work和flush_scheduled_work【转】
  20. [VS2015] [asp.net] 允许远程访问本机正在DEBUG的服务

热门文章

  1. Visual studio 2008 的语法高亮插件 NShader
  2. XMPPFrameWork IOS 开发(二)- xcode配置
  3. 多版本号并发控制(MVCC)在分布式系统中的应用
  4. Qt 学习之路 :Qt 线程相关类
  5. Linux后台开发面试问题汇总
  6. redis 记录
  7. 构建服务端的AMD/CMD模块加载器
  8. git 创建远程仓库
  9. MySQL存储过程详解 mysql 存储过程(二)
  10. 【转】 iOS Provisioning Profile(Certificate)与Code Signing详解