带颜色的慢速打印

SlowPrint with colors

我有一个问题。我无法在使用 colorama 或其他颜色模块的同时使用 slowprint 功能。

这是我的代码:

import os, sys
import time
import colorama
from colorama import init, Fore, Back, Style
colorama.init(autoreset=True)

#SlowPrint 
def print_slow(str):
    for letter in str:
        sys.stdout.write(letter)
        sys.stdout.flush()
        time.sleep(0.01)
#Test
print_slow (f"{Fore.RED}Hello World")

输出为:

←[31mHellow World

而不是应用实际的颜色。我该如何解决这个问题?

您的代码正在执行 print_slow(f"{Fore.RED}Hello World")。但是您在 print_slow() 中所做的似乎正在影响您的控制台驱动程序处理作用于颜色控制代码的 VT100 仿真的方式。请理解,当您看到 ←[31m 时,这就是 实际发送到控制台的内容 。由于 DEC dumb terminals 引入的 decades-old 约定,这些代码只生成颜色。它们只适用于终端驱动程序。不要指望在 IDE 中看到颜色,或者如果您将输出通过管道传输到文件并在记事本中打开它。

所以,不要在控制代码上调用 print_slow()。相反,执行 print(Fore.RED, end=""),然后才执行 print_slow ("Hello World")。但是如果你这样做,你也必须改变

colorama.init(autoreset=True)

colorama.init(autoreset=False)

因为如果您设置 autoreset=True,那么每次调用 print() 后都会取消设置颜色。但是,如果您更改 autoreset,您可能还必须执行 print(Style.RESET_ALL, end="") 才能显式取消设置颜色。您是否需要它取决于您的程序还在做什么。

这将解决问题:

import os
import sys
import time
import colorama
from colorama import init, Fore, Back, Style
colorama.init(autoreset=False)


def print_slow(str):
    for letter in str:
        sys.stdout.write(letter)
        sys.stdout.flush()
        time.sleep(0.01)

if __name__ == '__main__':
    print(Fore.RED, end="")
    print_slow("Hello World")
    print(Style.RESET_ALL, end="")