【问题标题】:Python to handle color to terminal and also in filePython 处理终端和文件中的颜色
【发布时间】:2017-10-27 09:16:57
【问题描述】:

我正在终端上打印 Pass 和 Fail,终端上带有颜色和一些输出文件。

终端输出:

  Parameter                Output                   Result
  ------------             ------------             -------
  Timer Enabled            Enabled                  Passed

文件输出(使用vim编辑器打开):

  Parameter                Output                   Result
  ------------             ------------             -------
  Timer Enabled            Enabled                  ^[[92mPassed^[[0m

在python中我使用了以下代码:

 HEADER = '\033[95m'
 OKBLUE = '\033[94m'
 OKGREEN = '\033[92m'
 WARNING = '\033[93m'
 FAIL = '\033[91m'
 ENDC = '\033[0m'
 BOLD = '\033[1m'
 UNDERLINE = '\033[4m'

代码执行发生在 linux 机器上,文件打开将在 windows 机器(word pad 或 notepad++)和 linux 中完成,如 vim 编辑器。

现在我需要帮助,当我从 vim 或 windows word pad 打开文件时。我不想看到像“^[[92mPassed^[[0m”这样的颜色代码太丑了。任何人都可以帮助我实现结果的最佳选择

【问题讨论】:

  • click 这样的库在输出到文件时会自动删除 ANSI 代码。它还为格式化/着色文本提供了一个很好的界面。

标签: python linux python-2.7 vim


【解决方案1】:

如果文件输出是通过方式生成的

python script.py > foo.txt

您可以使用os.isatty(1)(其中 1 是标准输出的文件句柄)来确定输出是否附加到终端(而不是文件)。如果是连在终端上的,不要输出颜色控制码。

您也可以自然地在事后剥离控制代码,例如

text = re.sub('\033\\[\d+m', '', text)

【讨论】:

  • python script.py > foo.txt 再次在文件中打印颜色代码.. os.isaaty(1) 我现在不明白我阅读文档,可能是条带化是不错的选择
【解决方案2】:
import sys
class Colors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'

def disable(self):
    self.HEADER = ''
    self.OKBLUE = ''
    self.OKGREEN = ''
    self.WARNING = ''
    self.FAIL = ''
    self.ENDC = ''
    # Prints to terminal
    print (Colors.FAIL + "This is the sample text..." + Colors.ENDC)     
    # Handles text without color code in file.  
    orig_stdout = sys.stdout
    f = open('out.txt', 'a')
    sys.stdout = f
    with open('out.txt', 'w') as f:
        print (color.FAIL + "This is the sample text..." + color.ENDC)

color = Colors()
color.disable()

disable 将帮助您在没有难看颜色代码的文件中获得输出。

我刚刚创建了一个示例代码。您可以根据需要更改和重复使用它。

【讨论】:

    【解决方案3】:

    尝试在 python 中使用 colorama 包来获取文本颜色,并在 Windows 和 Linux 上提供跨平台支持。它还可以与现有的 ANSI 库(如 Termcolor)结合使用。这种方法比在终端上手动打印用于文本着色的 ASCII 序列要好。

        from colorama import Fore, Back, Style
        print(Fore.RED + 'Red Text')
        print(Back.GREEN + 'background in Green')
        print(Style.DIM + 'Dim Text')
        print(Style.RESET_ALL)
        print('Normal Text')
    

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2015-09-10
      • 1970-01-01
      • 2016-02-07
      • 2010-11-09
      • 1970-01-01
      • 2014-05-18
      • 2014-07-04
      • 2018-09-30
      相关资源
      最近更新 更多