一日一技:如何实现带timeout的input?

简介: 一日一技:如何实现带timeout的input?

我们知道,在Python里面,可以使用input获取用户的输入。例如:

但有一个问题,如果你什么都不输入,程序会永远卡在这里。有没有什么办法,可以给input设置超时时间呢?如果用户在一定时间内不输入,就自动使用默认值。

要实现这个需求,在Linux/macOS系统下面,我们可以使用selectors。这是Python自带的模块,不需要额外安装。对应的代码如下:

import sys
import selectors
def timeout_input(msg, default='', timeout=5):
    sys.stdout.write(msg)
    sys.stdout.flush()
    sel = selectors.DefaultSelector()
    sel.register(sys.stdin, selectors.EVENT_READ)
    events = sel.select(timeout)
    if events:
        key, _ = events[0]
        return key.fileobj.readline().rstrip()
    else:
        sys.stdout.write('\n')
        return default

运行效果如下图所示:

selectors[1]这个模块,可以使用系统层级的select,实现IO多路复用。

这段代码来自inputimeout[2]。上面除了Linux/macOS版本外,还有Windows版本。大家有兴趣可以看一下。

目录
相关文章
|
Java 数据库连接 Spring
Spring之数据校验:Validation
【1月更文挑战第17天】 一、Spring Validation概述 二、实验一:通过Validator接口实现 三、实验二:Bean Validation注解实现 四、实验三:基于方法实现校验 五、实验四:实现自定义校验
488 2
Spring之数据校验:Validation
|
Python
Python网络编程基础(Socket编程) 使用try-except处理网络错误
【4月更文挑战第11天】在网络编程中,错误处理和异常管理是非常重要的部分。网络操作经常因为各种原因而失败,比如网络断开、服务器无响应、地址不正确等。因此,学会如何使用Python的异常处理机制来捕获和处理这些错误,是编写健壮的网络应用的关键。
|
9月前
|
Ubuntu Linux Shell
/etc/rc.d/rc.local 的作用
/etc/rc.d/rc.local是Linux系统中的一个重要配置文件,其主要作用是在系统启动时执行特定的命令或脚本。以下是关于/etc/rc.d/rc.local的详细解释: ### 作用 * **系统启动任务配置**:该文件允许系统管理员或用户配置在系统启动时需要自动运行的任务。这些任务可以是启动服务、运行特定程序或执行脚本等。 * **开机自启动程序**:通过编辑/etc/rc.d/rc.local文件,用户可以自定义开机启动程序。只需将需要开机启动的程序命令或脚本路径添加到该文件中,并在系统启动时该文件将被自动执行。 ### 文件内容 * 通常包含一个shell脚本,该脚本在
665 12
|
11月前
|
缓存 JavaScript 前端开发
因为不熟悉npm基础知识,我被同事笑话了
【10月更文挑战第17天】因为不熟悉npm基础知识,我被同事笑话了
因为不熟悉npm基础知识,我被同事笑话了
|
10月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
253 2
|
SQL JSON DataX
离线数仓(六)【ODS 层开发】
离线数仓(六)【ODS 层开发】
|
Docker 容器
『Docker Compose』使用国内镜像极速安装Docker Compose
📣读完这篇文章里你能收获到 - 使用国内镜像极速安装Docker Compose
21223 0
『Docker Compose』使用国内镜像极速安装Docker Compose
|
Python
mplfinance设置K线图中红涨绿跌的样式
要设置K线图中红涨绿跌的样式,您可以使用mplfinance库中的marketcolors参数来自定义K线图的颜色。默认情况下,mplfinance会使用红色表示上涨和绿色表示下跌,但您可以根据自己的需求进行修改。
1513 1
|
Web App开发 缓存 负载均衡
什么是HTTP代理?HTTP代理的作用?HTTP代理怎么设置?
HTTP代理是一种充当客户端和服务器之间的中间人的服务器。当客户端发起请求时,HTTP代理会拦截请求并将其转发给目标服务器。一旦目标服务器响应,HTTP代理会拦截响应并将其转发回客户端。HTTP代理可以被用于多种场景,例如加强安全、缓存内容以加速访问、访问受限资源等等。在这篇文章中,我们将会讨论HTTP代理的作用、类型以及如何设置它。
什么是HTTP代理?HTTP代理的作用?HTTP代理怎么设置?
|
XML JSON 程序员
以程序员的身份,教您使用API接口获取虾皮商品详情
作为一名程序员,我深知在使用虾皮(Shopee)电商平台进行业务开发时,通过API接口获取商品详情的重要性。本文将引导您逐步了解和使用虾皮的API接口,从而轻松获取商品详情数据,为您的业务提供有力支持。