【问题标题】:How do I print colored text in IDLE's terminal?如何在 IDLE 的终端中打印彩色文本?
【发布时间】:2017-07-17 07:28:14
【问题描述】:

这是一个很容易重复的问题——因为它是。但是,对此有很多不充分的答案(例如,试试curses! -- 指向一个 26 页的文档)。

当我在 IDLE 中输出时,我只想以蓝色以外的颜色打印文本。可能吗?有什么简单的方法可以做到这一点?我在 Windows 上运行 Python 3.6。

请举例说明。

(我发现 ANSI 代码在 IDLE 中不起作用,只能在终端上使用。)

【问题讨论】:

    标签: python python-3.x colors python-idle


    【解决方案1】:

    把它放在代码的“开始”处:

    import sys
    
    try:
        color = sys.stdout.shell
    except AttributeError:
        raise RuntimeError("Use IDLE")
    

    然后使用color.write(YourText,Color) 进行“打印”:

    color.write("Hi, are you called Miharu461? \n","KEYWORD")
    color.write("Yes","STRING")
    color.write(" or ","KEYWORD")
    color.write("No\n","COMMENT")
    

    打印出来:


    注意:这不会自动输入回车(就像在print 函数/语句中一样)。因此,当您打印时,将\n 放在最后一个字符串的末尾。

    您可以放置​​的“颜色”是:SYNCstdinBUILTINSTRINGconsoleCOMMENTstdoutTODO、@9876543336@、@9876 @、DEFINITIONKEYWORDERRORsel

    注意 2:这取决于您用于 IDLE 的配色方案。所以我建议你用它来突出显示,而不是制作一个程序来询问某个单词是什么颜色的。

    【讨论】:

    • 这也会在打印的字符串之后立即打印用color.write 打印的字符数。有没有办法只打印字符串?
    • 使用\n 作为回车键。示例:color.write("Foo\n","STRING") 与打印类似。另外,color.write 是我给它起的名字,因为我输入了color = sys.stdout.shell。您可以使用任何东西来代替“颜色”。
    • 这不是我的问题。使用write 方法有额外的意外输出:它在字符串之后立即打印字符串中的字符数。我该如何摆脱它?
    • 至少在我的电脑上,它不会打印出来。我添加了我在答案中得到的输出的图片。
    • 我看到的是输出后的一个蓝色数字,它是打印的字符总数。就像,如果我尝试运行它,可能会在“否”之后打印 38。 (我只是数了一下……不知道是不是正好38)
    【解决方案2】:

    您可以使用clrprint模块在空闲时打印彩色文本,终端和Powershell也可以。

    安装:

    pip install clrprint
    

    用法:

    from clrprint import *
    clrhelp()  # to see colors available
    user_input = clrinput('INPUT MESSAGE', clr='green')  # just like input()
    clrprint('YOURTEXT', user_input, clr='color')  # just like print()
    

    【讨论】:

    • 如果你不使用from [...] import * 语法会更好,因为我很难知道来自模块的内容。
    【解决方案3】:

    根据Why does writing to stdout in console append the number of characters written, in Python 3?"... write 也会返回字符数(其实是字节,试试sys.stdout.write('へllö'))因为python控制台打印每个表达式的返回值到stdout,返回值附加到实际打印的值。"

    使用

    _ = color.write("Hello world","COMMENT")
    

    “吃掉”额外的输出。 _ 是一个“一次性”变量,请参阅 What is the purpose of the single underscore “_” variable in Python?

    【讨论】:

    • 如果您不打算使用该变量,最好使用_
    • @Seth 感谢您的提示 - 我相应地编辑了我的答案。
    【解决方案4】:

    长度的strnage输出用return关键字,NORMAL也是一种颜色

    【讨论】:

      【解决方案5】:

      我面临的问题是如何在 IDLE 中正确输出错误消息,因为 sys.exc_info() 像正常输出一样打印,而 traceback.print_exc() 有点太长太详细了。所以,我只想用红色打印异常,比如“traceback”。

      感谢顶级 anwser 让我了解如何使用 write() 指定消息的类型。无意中,我发现了另一种满足我需求的方法,只需在 print() 时添加file=sys.stderr。然后我会收到一个引人注目但简短的错误消息。 python 3.6中的一个例子:

      import sys
      try:
          1/0
      except Exception as e:
          print(repr(e), file=sys.stderr)
      

      【讨论】:

      • 嗨@yawn,看起来这不能回答问题。请记住,这不是一个论坛,因此只有在您有可以真正解决 OP 问题的内容时才发布答案。
      • 对不起,@toti08,我想我只是按照标尺“提供详细信息并分享您的研究!”我的方法确实实现了在 IDLE 的终端中打印除蓝色以外的彩色文本。请让我知道如何调整我的答案,非常感谢。
      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2018-03-01
      相关资源
      最近更新 更多