Python 命令行非阻塞输入的小例子

这里是 Python 命令行非阻塞输入的小例子的完整攻略。

什么是命令行的阻塞输入

在命令行下运行 Python 时,我们通常使用 input() 函数从标准输入中读取数据。input() 会阻塞程序的执行,直到用户输入了数据并按下了回车键。

这种阻塞输入的方式有利有弊。它简单易用,不需要复杂的异步编程技巧。但是它会让程序在读取输入等待用户的响应时,不能执行其他的任务。

如何实现命令行的非阻塞输入

为了让程序可以在读取输入时继续执行其他任务,我们可以使用 Python 的 select 模块中的 select() 函数来实现 非阻塞 I/O

在使用 select() 函数的时候,我们可以让 Python 监视多个文件描述符(包括标准输入)的可读性和可写性。当标准输入有数据可以读取时,我们就可以立即读取数据并继续执行其他的任务。下面是一个使用 select() 函数实现非阻塞输入的例子。

import select
import sys

print("Please input something:")

while True:
    r, _, _ = select.select([sys.stdin], [], [], 1.0)  # 1 秒超时
    if r:
        data = sys.stdin.readline().strip()  # 读取一行输入
        print("You input:", data)
    else:
        print("Timeout!")

在上面的例子中,我们使用了 select.select() 函数来监听标准输入是否有数据可以读取,第一个参数是一个列表,包含要监听的文件描述符,这里只监听了标准输入。select.select() 函数会在第四个参数指定的秒数内超时返回,如果监听的文件描述符有可读事件,select.select() 会返回一个三元组,包含可读、可写和异常三个列表。如果标准输入中有数据可以读取,程序就会读取输入并输出。如果超时,程序则会打印超时信息。

第二个示例说明

为了更好地展示非阻塞输入的特点,我们可以使用一个多线程的示例:在一个线程中循环输出数字,同时在另一个线程中监听标准输入。当监听线程收到 "stop" 的输入时,就会停止输出。

import threading
import select
import sys

def print_number():
    for i in range(10):
        print(i)
        time.sleep(1)

def read_input():
    while True:
        r, _, _ = select.select([sys.stdin], [], [], 1.0)
        if r:
            data = sys.stdin.readline().strip()
            if data == "stop":
                print("Stopped!")
                break

if __name__ == '__main__':
    t1 = threading.Thread(target=print_number)
    t2 = threading.Thread(target=read_input)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

在上面的例子中,我们创建了两个线程,一个线程输出数字,另一个线程监听标准输入。当用户输入 "stop" 时,监听线程就会发出停止信号,并输出 "Stopped!"。这个例子展示了如何使用非阻塞输入来实现多任务的同时执行,使得一个线程不会因为阻塞等待用户输入而导致整个程序的阻塞。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 命令行非阻塞输入的小例子 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python中re模块:匹配开头/结尾(^/$)

    在 Python 中,re 模块提供了一些特殊字符来匹配字符串的开头和结尾。本文将详细介绍如何使用 re 模块来匹配字符串的开头和结尾,包括正则表达式的编写、re 模块的使用等。 匹配开头 在正则表达式中,^ 表示匹配字符串的开头。以下是一个匹配以字母 A 开头的字符串的正则表达式示例: import re text = "Apple is a f…

    python 2023年5月14日
    00
  • Python如何实现文本转语音

    一、Python如何实现文本转语音 Python中实现文本转语音,需要安装第三方库Text-to-Speech(TTS)。 安装TTS库 TTS库有多种,以下列出几个比较流行的TTS库: pyttsx3,支持多个TTS引擎,支持Python 2和3,支持多种操作系统。 gTTS,使用谷歌TTS引擎,支持Python 2和3,需要联网。 pyttsx,支持多个…

    python 2023年5月19日
    00
  • python 重定向获取真实url的方法

    在Python中,我们经常需要获取网页的真实URL,以便进行后续的处理。有时候,网页的URL会被重定向到其他URL,这时候我们需要获取重定向后的真实URL。本文将详细讲解Python重定向获取真实URL的方法,包括使用requests库和urllib库的示例代码。 使用requests库获取真实URL requests库是Python的HTTP库,可以方便地…

    python 2023年5月15日
    00
  • Python线性方程组求解运算示例

    以下是关于“Python线性方程组求解运算示例”的完整攻略: 简介 线性方程组是一组包含线性方程的方程组,其中每个方程都是形如a1x1 + a2x2 + … + anxn = b的形式。在本教程中,我们将介绍如何使用Python求解线性方程组。 Python线性方程组求解 Python中有多种方法可以求解线性方程组,包括numpy库中的linalg.so…

    python 2023年5月14日
    00
  • python定时按日期备份MySQL数据并压缩

    下面是“python定时按日期备份MySQL数据并压缩”完整攻略。 一、安装所需库 1.1 安装pymysql库 pip install pymysql 1.2 安装schedule库 pip install schedule 二、编写备份脚本 2.1 连接MySQL数据库 import pymysql conn = pymysql.connect(host…

    python 2023年6月3日
    00
  • 2021年最新版Python安装及使用教学

    2021年最新版Python安装及使用教学 安装Python 前往Python官网下载Python,选择对应操作系统和位数的安装包。推荐下载最新版本,目前是Python3.9.6版本。 安装Python。在安装过程中,注意勾选“Add Python 3.x to PATH”选项,以便在终端中能够访问Python。 验证Python是否成功安装。打开终端(对于…

    python 2023年5月30日
    00
  • 网站渗透常用Python小脚本查询同ip网站

    网站渗透常用Python小脚本查询同IP网站 本攻略将介绍如何使用Python编写小脚本查询同IP网站。我们将使用socket库获取网站的IP地址,并使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML响应,以查找同IP网站。我们将提供两个示例代码,分别用于查询同IP网站和查询同IP网站的子域名。 安装所需库 在开始前,我们需…

    python 2023年5月15日
    00
  • Python中使用urllib2防止302跳转的代码例子

    您好,针对“Python中使用urllib2防止302跳转”的问题,这里为您提供以下完整攻略: 1. 什么是302跳转 302 Found是指请求的文档已被临时移动到新的URL下,但页面的内容、URL等方式都保持不变。主要原因有两个:一是在跳转到新的URL时希望保持搜索引擎的收录等信息不变,新的URL只是为了更好的用户体验而设置的。 2. Python 中使…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部