一日一技:如何实现带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版本。大家有兴趣可以看一下。

目录
相关文章
|
10月前
Input 标签监听内容输入(change、input 事件区别)
Input 标签监听内容输入(change、input 事件区别)
75 0
|
7月前
|
消息中间件
分享zframe_send使用过程中 的一个小问题
在zframe_send函数中,第一个参数是一个指向zframe_t指针的指针。这是因为在发送帧之后,该函数会销毁帧并将你的指针设置为NULL。这样做是为了防止你再次使用已经被销毁的帧。
41 0
|
7月前
|
数据安全/隐私保护
input中常用的type属性与使用场景
input中常用的type属性与使用场景
33 0
|
消息中间件 Java Kafka
Apache Kafka-max.poll.interval.ms参数含义说明
Apache Kafka-max.poll.interval.ms参数含义说明
478 0
|
网络协议 PHP
php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()
php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()
271 0
Can‘t bind to formControl since it isn‘t a known property of input错误消息的处理
试图给input标签页施加formControl这个Directive的时候,出现如下错误:
Can‘t bind to formControl since it isn‘t a known property of input错误消息的处理
|
缓存 网络协议 关系型数据库
max_connect_errors参数
一次ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'报错,重新认识max_connect_errors参数。
1940 0
|
关系型数据库 MySQL 数据库
interactive_timeout和wait_timeout的关系
interactive_timeout = 28800 wait_timeout = 28800 #这两个参数默认都是28800s,即8个小时; interactive_timeout指的是mysql在关闭一个交互的连接之前所要等待的秒数 wait_timeout指的是mysql在关闭一个非交互的连接之前所要等待的秒数 通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接 (1)session级别修改interactive_timeout=10,wait_timeout默认不变。
2220 0
|
关系型数据库 MySQL 数据安全/隐私保护
参数max_connect_errors
max_connect_errors 这个参数控制登陆失败尝试次数,也就是你可以有多少次机会重试登陆; 可以通过status中查看下面两个参数: Aborted_clients 表示已经成功建立连接的登陆,然后超时断开,或者kill掉的次数; Aborted_connec...
1189 0
|
JavaScript
jquery(live)中File input的change方法只起一次作用的解决办法
jquery中File input的change方法只起一次作用的解决办法,需要的朋友可以参考下。 错误写法 复制代码代码如下: $(“#uploadImg”).
1270 0