点击终端

时间:2018-10-02 04:21:58

标签: python python-3.x time sleep

我正在使用Python脚本构建命令行工具。这是一个循环,用于检查数据并在延迟几秒钟后打印出一些东西。直到我在没有键盘事件的情况下在终端上单击任何内容或通过鼠标选择文本之前,它都可以正常工作。之后它什么也不做,不会打印并重新检查

import time
import sys
print('some thing')
for remaining in range(10, 0, -1):
    sys.stdout.write("\r")
    sys.stdout.write("recheck in {:2d}.".format(remaining))
    sys.stdout.flush()
    time.sleep(1)

sys.stdout.write("\rComplete!            \n")
input()

我的环境是Windows 10上的anaconda 64位

2 个答案:

答案 0 :(得分:1)

Python在Python 3.5中大大改变了其系统信号处理。 https://www.python.org/dev/peps/pep-0475/

它曾经在信号中断系统调用时引发InterruptedError。现在,信号中断时,系统调用包装程序代码将重新调用系统调用必要时重新计算任何超时时间。此级别的错误可能会以非常长的值召回系统调用。

附加调试器,查看进程卡住的位置。

编辑:将windbg附加到固定的控制台后。我发现这不是问题。我在新答案中发布了真正的解决方案。

答案 1 :(得分:1)

由于控制台窗口处于称为WriteConsole的模式,因此该控制台在Windows SDK功能QuickEdit mode中处于阻塞状态。

要解决此问题,请转到控制台左上角菜单中的“属性”选项。

然后取消选中“快速编辑”模式。

那里有快速编辑模式,可帮助您从控制台复制和粘贴文本。因此,当控制台处于该模式时,它将停止对控制台的所有写入操作,以便在您尝试选择和复制/粘贴时文本不会移动。