猿问

如何在 Python 3 中调用之前停止函数执行

我正在将一个我无缘无故编写的 C++ 程序移植到 Python 3。有一个使用 spin() 函数的 spinner() 函数。这些在程序顶部显示一个横幅。但是,由于某种原因我无法弄清楚,spin() 函数在被调用之前正在执行。sleep(1) 也在被调用之前被执行。我无法弄清楚为什么在被调用之前执行这些。它当前先执行 sleep() 函数,然后在调用之前执行 spin() 函数。它们不应该在显示第一个数组项之后执行。


我曾尝试将 spin() 和 sleep() 函数放在不同的位置,以尝试解决从何处调用它的问题,但这样做会破坏当前的功能。


import time

import sys


def spin():

    spinner = ['/', '-', '\\', '|', '']

    for i in spinner:

        sys.stdout.write(i)

    time.sleep(1)

    sys.stdout.write("\b")

    sys.stdout.flush()


def spinner():

    text = "\tVigenere Cipher\n"

    textArray = list(text)

    for i in range(len(textArray)):

        for x in range(i):

        sys.stdout.write(textArray[x])

    spin()

    sys.stdout.write("\r")

    sys.stdout.flush()

spinner()

我希望它从 textArray 打印一个字符,显示微调器,打印下一个字符,显示微调器等。


实际结果是它先休眠,打印微调器,然后打印第一个字符。


翻过高山走不出你
浏览 207回答 1
1回答

慕少森

您需要在sys.stdout.flush() 之前而sleep不是之后调用。flush是强制文本从缓冲区到屏幕的魔法,并且在这sleep意味着你(通常;缓冲是一个实现细节)在sleep完成之前不会看到任何东西。
随时随地看视频慕课网APP

相关分类

Python
我要回答