一日一技:如何实现带Timeout的Input?

开发 前端
在Linux/macOS系统下面,我们可以使用selectors。这是Python自带的模块,不需要额外安装。

我们知道,在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版本。大家有兴趣可以看一下。

参考资料

[1] selectors: https://docs.python.org/3.8/library/selectors.html

[2] inputimeout: https://github.com/johejo/inputimeout/blob/master/inputimeout/inputimeout.py

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2024-11-11 00:38:13

Mypy静态类型

2021-10-15 21:08:31

PandasExcel对象

2022-03-12 20:38:14

网页Python测试

2021-09-13 20:38:47

Python链式调用

2021-03-12 21:19:15

Python链式调用

2021-04-27 22:15:02

Selenium浏览器爬虫

2023-10-28 12:14:35

爬虫JavaScriptObject

2024-07-30 08:16:18

Python代码工具

2024-07-30 08:11:16

2021-07-27 21:32:57

Python 延迟调用

2021-05-08 19:33:51

移除字符零宽

2022-03-07 09:14:04

Selenium鼠标元素

2021-02-14 22:22:18

格式图片 HTTP

2021-07-26 21:15:10

LRU缓存MongoDB

2021-04-05 14:47:55

Python多线程事件监控

2024-11-13 09:18:09

2020-12-11 06:30:00

工具分组DataFrame

2023-10-29 09:16:49

代码安全命令

2021-05-13 09:01:51

Cloud Flare浏览器网站

2024-10-16 21:47:15

点赞
收藏

51CTO技术栈公众号