Home >Backend Development >Python Tutorial >How to Implement Non-Blocking Console Input in Python?

How to Implement Non-Blocking Console Input in Python?

DDD
DDDOriginal
2024-12-01 18:00:18948browse

How to Implement Non-Blocking Console Input in Python?

Non-blocking Console Input

Non-blocking console input is crucial in applications where simultaneous interaction with the user and continuous processing are necessary. In this case, the goal is to implement this feature for a Python IRC client.

Non-blocking Input on Windows

For Windows systems, the msvcrt module provides a solution:

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

Non-blocking Input on Linux

On Linux, the select, tty, and termios modules can be used:

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':
                break

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

Cross-Platform Non-blocking Input

For a cross-platform solution or to integrate GUI functionality, Pygame can be utilized:

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

With these methods, you can implement non-blocking console input in your Python applications, allowing for continuous processing while responding to user input in real time.

The above is the detailed content of How to Implement Non-Blocking Console Input in Python?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn