【问题标题】:Python fails to output ANSI color codes for the terminalPython 无法为终端输出 ANSI 颜色代码
【发布时间】:2017-04-06 21:14:00
【问题描述】:

我有一个非常简单的 python +2.7 文件,其中包含以下代码(在终端中运行时)输出两个字符串打印的 ANSI 颜色代码。

# coding=utf8

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

print "\033[95mWorks fine\033[0m"
print '\033[95mWorks fine\033[0m'
print bcolors.OKBLUE, "Fails to work", bcolors.ENDC

为什么第三个打印语句无法在终端中产生任何颜色?关于使用 utf8 文件有什么我应该知道的吗?

系统:ubuntu 16.04

【问题讨论】:

  • 你这里用的不是utf8,都是ASCII码。但这应该会让它更有可能起作用。

标签: python python-2.7 terminal ansi-colors


【解决方案1】:

要解决您的问题,您只需要import os 并在代码开头添加os.system("")

【讨论】:

  • 您能否详细说明为什么会这样以及它的作用是什么?
【解决方案2】:

单引号-引号在大多数其他语言中是不同的。不是蟒蛇。下面是显示脚本应该可以工作的屏幕截图(也许 OP 应用了一些调色板,例如 solarized,这会让人感到困惑——可以将这些颜色中的 any 重新分配到模仿xterm的终端):

这是来自 xterm 的所谓颜色立方体(您可能已经见过):

并且(一些终端模拟器迟到了),任何实现 xterm 控制序列的东西都可以重新编程,就像这样使用反转颜色:

【讨论】:

  • 嗯...你知道前两行工作正常吗?
  • 这是一个截图:imgur.com/a/fcWQs 如果这是单引号或双引号的问题,前两个打印中的一个会失败。
  • 蓝色按要求。您的屏幕截图有些奇怪,因为 94 是蓝色,95 是洋红色。
  • 这绝对是错误的。其他语言可能会区分单引号和双引号,但 Python 不会。
【解决方案3】:

这是一个有效的例子:

#!/usr/bin/python3

class ConsolePrint(object):
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

    def print_warning(self, msg):
        print(self.WARNING + msg)

    def print_error(self, msg):
        print(self.FAIL + self.BOLD + msg)

    def print_info(self, msg):
        print(self.OKBLUE + msg)


if __name__ == "__main__":
    cp = ConsolePrint()
    cp.print_warning("WARNING print text {0}".format(100))
    cp.print_error("ERROR print text {0}".format(200))
    cp.print_info("INFO print text {0}".format(300))

【讨论】:

  • 所有这一切都会删除转义序列和字符串之间的空格。我怀疑这会有很大的不同。
  • 奇怪的是,这只会打印第二条错误消息的颜色:imgur.com/Iut240P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2018-09-30
  • 1970-01-01
  • 2021-01-14
  • 2017-07-17
相关资源
最近更新 更多