python - 用空格键中断计时器

标签 python macos timer sleep

假设我想计算我能屏住呼吸多长时间,我想用 Python 来做到这一点。我有一个简短的脚本:

start = time()
try:
    while True: pass
except KeyboardInterrupt:
    print(time() - start)

这具有我想要的基本功能,但它有一个致命的缺点。长时间屏住呼吸后,我的思维可能会有点模糊,我可能无法立即协调按下 Ctrl+c,并且我可能会丢失有关训练的重要数据。

空格键是更容易击中的目标。有没有一种简单的方法可以让循环在按下时停止?

编辑:我在 OSX 上

最佳答案

您需要将控制台的键盘(pty)驱动程序置于原始模式。 这个答案中对此进行了解释:What is the easiest way to detect key presses in python 3 on a linux machine?

随意引用该答案:

#! /usr/bin/env python3
import sys
import termios
import time
import tty


def hold_breath(fin):
    orig_setting = termios.tcgetattr(fin)
    tty.setraw(fin)
    start = time.time()
    try:
        ch = fin.read(1)[0]
        assert ch == ' '
    finally:
        print('You lasted %.03f seconds.\r' % (time.time() - start))
        termios.tcsetattr(fin, termios.TCSADRAIN, orig_setting)


if __name__ == '__main__':
    print('Hit space.')
    hold_breath(sys.stdin)

在 OS/X 和 Linux 上运行良好。如果您在程序恢复原始设置之前中断了程序,那么 $ stty sane 就是您的 friend 。

关于python - 用空格键中断计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652980/

相关文章:

python - 在 Python 中比较黄金标准 csv 文件和提取值 csv 文件

php - 在 Mac 上搭建 MAMP 环境……最佳方案?

objective-c - NSWindow 在单击、调整大小等之前不会绘制

c# - .NET FileSystemWatcher 是否与 Mac OS 上的 Mono 一起工作?

c - 如何在STM板上的端口D6(PE_9)上获取PWM信号?

javascript - 我应该如何让这个番茄计时器更有用?

python - 使用 Pybind11 包装 STL 容器返回类型

python - 如何在 python 中已有的列表中插入第三个嵌套列表?

python - 我怎么知道 tensorflow 是否使用 cuda 和 cudnn?

c - 从旧的 init_timer 到新的 timer_setup 的适配