很久很久以前,系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.

python执行命令不阻塞_Python 命令行非阻塞输入相关推荐

  1. python socket server accpet 时间_Python socket.accept非阻塞?

    你可能想要像select.select()(见 documentation).您提供select()和三个套接字列表:要监视的可用性,可写性和错误状态的套接字.当新客户端等待时,服务器套接字将可读. ...

  2. 阻塞式IO和非阻塞式IO

    什么是阻塞式IO,什么是非阻塞式IO?区分他们有何用? 阻塞式IO:IO即input/output,阻塞式IO指的是"一旦输入/输出工作没有完成,则程序阻塞,直到输入/输出工作完成" ...

  3. 非阻塞 php,PHP异步非阻塞之路

    需求 一个简单的需求,提交大量数据到远程服务器,此时并不需要等待返回. 另一个需求,获取API数据,同时查询数据库,并行处理,加快响应速度. 配置问题 set_time_limit ignore_us ...

  4. 深入理解非阻塞同步IO和非阻塞异步IO

    这两篇文章分析了Linux下的5种IO模型 http://blog.csdn.net/historyasamirror/article/details/5778378 http://blog.csdn ...

  5. 同步I/O、异步I/O、阻塞I/0、非阻塞I/O、五种I/O模型、高性能网络模型

    10.I/O相关概念 https://www.cnblogs.com/xiaoxi/p/6525396.html 10.1.同步和异步 ​ 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须 ...

  6. java 多线程阻塞队列 与 阻塞方法与和非阻塞方法

    Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...

  7. cmd打开python显示不是内部_Python命令行窗口提示“不是内部或外部命令……”的解决方法...

    前提:已在[控制面板\系统和安全\系统\高级系统设置\高级\环境变量]里修改变量Path,编辑系统变量后面添加了[;D:\Python27],可以在命令行模式下正常进入Python交互式环境,并能直接 ...

  8. Python 命令行非阻塞输入

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

  9. python执行linux和window的命令

    linux: python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system ...

  10. python 拆分excel工作表_Python几行代码轻松拆分表格

    Python几行代码轻松拆分表格 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 什么?,Python几行代码竟然可以按指定轻松拆分表格? 将test.xls中的数据按地区 ...

最新文章

  1. INSTALL_FAILED_VERSION_DOWNGRADE
  2. 人脸识别门禁在安防行业的发展前景
  3. 在预加载新闻时,怎么去掉初始化内容的显示尴尬?
  4. 基于ssm的水果商城系统项目总结
  5. python环境配置与pytorch下载
  6. Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child
  7. Java数据库篇2——数据库基本操作
  8. 三言五载道不尽【追梦五年】
  9. 20191011:冒泡排序的改良版--Shaker排序
  10. 比较两个对象是否一样的代码
  11. Android Studio系列教程四--Gradle基础
  12. SpringCloud学习笔记(15)----Spring Cloud Netflix之Hystrix Dashboard的使用
  13. 论文阅读笔记 | 分类网络——ParNet
  14. 计算机网络体系结构-虚拟专用网
  15. hdu 4215 Number Theory?(打表)
  16. webstorm提示TypeError: this.cliEngine is not a constructor
  17. 发布网站 IIS部署网站
  18. 哲学家就餐问题实验报告
  19. Java程序员跳槽的经验开怀之谈(现在很多大厂都在裁员,你懂的)
  20. [catsVSdogs]猫狗大战代码注释讲解_1

热门文章

  1. 20200123每日一句
  2. Don't be afraid. You are stronger than you think.
  3. 181015扇贝有道词霸每日一句
  4. 文献格式 ShareLaTeX and Overleaf
  5. 扇贝有道180915每日一句
  6. Atitit 查看目录与分区空间占用原理 查看目录空间就是查看所在分区空间的占用 [root@lenovo ~]# df -h /elk 文件系统 容量 已用 可用
  7. Atitit 互操作之道 接口之道 attilax著
  8. Atitit常见需求分析方法与工具链 attilax大总结
  9. paip.从HTML select 获取数据
  10. 十年期货股票行情数据轻松处理——TDengine在同心源基金的应用