2

我在 Windows 中使用默认的 Python 3.8 解释器。

每当我在其中运行一个长循环时,它就会停止,我必须按下或按住 Enter 键才能继续运行。这在 Linux 中从来都不是问题。

如何解决此行为?

# this loop will eventually stop/hang/pause forever, until I press the Enter key
for i in range(5000):
   time.sleep(1)
   print(i)

如果我通过任何 IDE 运行代码,它不会暂停。但是出于我自己的原因,我想直接在解释器中运行这个特定的代码。

在等待超过 1 分钟后,我截取了这张截图。这不是一个一次性的问题。我运行的任何循环,无论多小、多大或多复杂,都会在几次迭代后永久停止,直到我按下键盘上的 ENTER 键。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

1

您展示的程序实际上什么都不做。它不会向控制台打印任何内容,也不会等待输入。

所以它实际上会运行 83 分钟而不显示它正在做任何事情,然后它将以退出代码 0 退出。

于 2020-08-04T20:18:08.900 回答
1

如果您单击输出,控制台将暂停脚本,它会尝试停止代码以“选择”输出的一部分。不点击就试一试。ENTER 将从控制台上的选择栏中移除焦点,因此您将看到它不再存在。

于 2020-08-04T22:24:19.347 回答
0

我猜你遇到了什么。

当然,程序继续运行,但您只是没有看到输出,因为输出是缓冲的,您没有刷新它。

因此,在每个之后print(i),调用函数flush_output_streams()

def flush_output_streams() -> None:
    """
    flushes the output streams.

    flush calls are wrapped in try ... except, because 
    standard streams might be replaced with other streams which 
    dont have the flush method.
    """
    try:
        sys.stdout.flush()
    except Exception:
        pass
    try:
        sys.stderr.flush()
    except Exception:
        pass
于 2020-08-04T22:10:10.420 回答