Python 命令行非阻塞輸入

    好久好久之前,系windows平臺下,用C語言寫過一款貪食蛇遊戲,cmd界面,用kbhit()函數實現非阻塞輸入。系windows平臺下用python依然能夠調用msvcrt.khbit實現非阻塞監聽。但系喺linux下面就冇呢支歌仔唱。python

    隨手google咗一下,基本上都用select實現非阻塞監聽,但問題是,監聽的是用select以後是不能像getchar()那樣,即時收到單個字符的輸入,必需要等待回車。linux

    通過努力不怠咁google... [好吧,仍是google。沒有google什麼也作不了。]ios

    最後系一大堆英文資料入面,拼湊出以下可用的代碼,實現了單個字符非阻塞輸入。windows

    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的輸入模式,由行輸入變爲單字符。google

 

    END.spa

相關文章
相關標籤/搜索