中国如何缺席ChatGPT盛宴

最新库子,45亿地址信息泄漏

母子乱伦:和儿子做了,我该怎么办?

独家丨拿到ChatGPT版Bing搜索的内测后,我觉得所有大厂都该慌了。

民营离场论又变了:改扬弃论了

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

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

Python客栈 2022-08-14

The following article is from 未闻Code Author kingname

我们知道,在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

往期推荐1、Python比较两个日期的多种方法!2、大一女生废话编程爆火!懂不懂编程的看完都拴Q了3、用Python制作一个相册播放器(附源码)4、Cython 是什么?为什么会有 Cython?5、Python 中的万能之王 Lambda 函数点击关注公众号,阅读更多精彩内容

文章有问题?点此查看未经处理的缓存