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