python非阻塞输入,Python非阻塞控制台输入

I am trying to make a simple IRC client in Python (as kind of a project while I learn the language).

I have a loop that I use to receive and parse what the IRC server sends me, but if I use raw_input to input stuff, it stops the loop dead in its tracks until I input something (obviously).

How can I input something without the loop stopping?

Thanks in advance.

(I don't think I need to post the code, I just want to input something without the while 1 loop stopping.)

EDIT: I'm on Windows.

解决方案

For Windows, console only, use the msvcrt module:

import msvcrt

num = 0

done = False

while not done:

print(num)

num += 1

if msvcrt.kbhit():

print "you pressed",msvcrt.getch(),"so now i will quit"

done = True

For Linux, this article describes the following solution, it requires the termios module:

import sys

import select

import tty

import termios

def isData():

return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])

old_settings = termios.tcgetattr(sys.stdin)

try:

tty.setcbreak(sys.stdin.fileno())

i = 0

while 1:

print(i)

i += 1

if isData():

c = sys.stdin.read(1)

if c == '\x1b': # x1b is ESC

break

finally:

termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)

For cross platform, or in case you want a GUI as well, you can use Pygame:

import pygame

from pygame.locals import *

def display(str):

text = font.render(str, True, (255, 255, 255), (159, 182, 205))

textRect = text.get_rect()

textRect.centerx = screen.get_rect().centerx

textRect.centery = screen.get_rect().centery

screen.blit(text, textRect)

pygame.display.update()

pygame.init()

screen = pygame.display.set_mode( (640,480) )

pygame.display.set_caption('Python numbers')

screen.fill((159, 182, 205))

font = pygame.font.Font(None, 17)

num = 0

done = False

while not done:

display( str(num) )

num += 1

pygame.event.pump()

keys = pygame.key.get_pressed()

if keys[K_ESCAPE]:

done = True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值