perl&#39>是否有任何python等价物
Listing Table
id -> int (autoincrement)
name -> varchar(25)
imagename -> varchar(10)
desription -> varchar(2000)
favorite -> boolean
在python中可用吗?
我知道解决方案;
print color 'red';
print <something>;
print color 'reset';
我想要的是我应该可以为所有打印消息设置颜色,例如
"\x1b[1;%dm" % (<color code>) + "ERROR: log file does not exist" + "\x1b[0m"
这里&#39; function_print_something&#39;是我的python函数,它会将一些格式化的日志消息打印到屏幕上。
答案 0 :(得分:70)
Python termcolor module会这么做吗?对于某些用途,这将是一个粗略的等价物。
from termcolor import colored
print colored('hello', 'red'), colored('world', 'green')
示例来自this post,其中包含更多内容。以下是docs
中示例的一部分import sys
from termcolor import colored, cprint
text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
print(text)
cprint('Hello, World!', 'green', 'on_red')
一个特定的要求是设置颜色,并且可能是其他终端属性,以便所有后续打印都是这样的。 虽然我在原帖中说过这个模块可以实现,但我现在不这么认为。请参阅最后一节,了解如何做到这一点。
但是,大多数情况下,我们用彩色,一行或两行打印短段文本。因此,这些示例中的界面可能比“打开”颜色,打印然后将其关闭更合适。 (就像在Perl示例中所示。)Perhaphs你可以在打印函数中添加可选参数以便为输出着色,并在函数中使用模块的函数为文本着色。这也可以更容易地解决格式化和着色之间的偶然冲突。只是一个想法。
这是设置终端的基本方法,以便使用给定的颜色,属性或模式渲染所有后续打印。
一旦将适当的ANSI序列发送到终端,就会以这种方式呈现所有后续文本。因此,如果我们希望将来打印到此终端的所有文本都是明亮/粗体红色,请打印ESC[
后跟“明亮”属性(1)和红色(31)的代码,然后是{{1 }}
m
要关闭任何先前设置的属性,请使用0表示属性# print "\033[1;31m" # this would emit a new line as well
import sys
sys.stdout.write("\033[1;31m")
print "All following prints will be red ..."
(品红色)。
要在python 3中抑制新行,请使用\033[0;35m
。剩下的工作是将其打包用于模块化使用(并且更容易消化)。
档案 colors.py
print('...', end="")
我建议您快速阅读一些有关代码的参考资料。可以组合颜色和属性,并且可以在此包中放置一个很好的列表。一个脚本
RED = "\033[1;31m"
BLUE = "\033[1;34m"
CYAN = "\033[1;36m"
GREEN = "\033[0;32m"
RESET = "\033[0;0m"
BOLD = "\033[;1m"
REVERSE = "\033[;7m"
如果import sys
from colors import *
sys.stdout.write(RED)
print "All following prints rendered in red, until changed"
sys.stdout.write(REVERSE + CYAN)
print "From now on change to cyan, in reverse mode"
print "NOTE: 'CYAN + REVERSE' wouldn't work"
sys.stdout.write(RESET)
print "'REVERSE' and similar modes need be reset explicitly"
print "For color alone this is not needed; just change to new color"
print "All normal prints after 'RESET' above."
的常量使用是麻烦的,它可以包装在一个小函数中,或者包变成一个类,其方法设置终端行为(打印ANSI代码)。
上面的一些更多的建议是查找它,例如组合反向模式和颜色。 (这在问题中使用的Perl模块中可用,并且对顺序和类似也很敏感。)
很容易找到一个方便的转义码列表,虽然有很多关于终端行为的引用以及如何控制它。 Wiki page on ANSI escape codes包含所有信息,但需要一些工作才能将它们组合在一起。 Bash prompt上的页面包含许多特定的有用信息。这是another page,带有直接的代码表。 还有更多。
这可以与sys.stdout.write()
等模块一起使用。
答案 1 :(得分:12)
我建议all()
。它与colorama相似,但不那么冗长,它支持sty和8bit颜色。您还可以使用自己的颜色扩展颜色寄存器。
from sty import fg, bg, ef, rs, RgbFg
foo = fg.red + 'This is red text!' + fg.rs
bar = bg.blue + 'This has a blue background!' + bg.rs
baz = ef.italic + 'This is italic text' + rs.italic
qux = fg(201) + 'This is pink text using 8bit colors' + fg.rs
qui = fg(255, 10, 10) + 'This is red text using 24bit colors.' + fg.rs
# Add new colors:
fg.set_style('orange', RgbFg(255, 150, 50))
buf = fg.orange + 'Yay, Im orange.' + fg.rs
print(foo, bar, baz, qux, qui, buf, sep='\n')
演示:
答案 2 :(得分:3)
有一些图书馆可以提供帮助。对于cmdline工具,我有时使用colorama。
e.g。
from colorama import init, Fore, Back, Style
init()
def cprint(msg, foreground = "black", background = "white"):
fground = foreground.upper()
bground = background.upper()
style = getattr(Fore, fground) + getattr(Back, bground)
print(style + msg + Style.RESET_ALL)
cprint("colorful output, wohoo", "red", "black")
但是,您可能希望使用枚举和/或添加一些检查,而不是使用字符串。不是最漂亮的解决方案,但适用于osx / linux和windows,并且易于使用。
有关此主题和跨平台支持的其他主题:e.g. here。
答案 3 :(得分:3)
您可以尝试使用python 3:
from termcolor import colored
print(colored('Hello, World!', 'green', 'on_red'))
如果您使用的是Windows操作系统,则上述代码可能不适合您。然后你可以试试这段代码:
from colorama import init
from termcolor import colored
# use Colorama to make Termcolor work on Windows too
init()
# then use Termcolor for all colored text output
print(colored('Hello, World!', 'green', 'on_red'))
希望有所帮助。
答案 4 :(得分:3)
旁注:Windows用户应首先运行os.system('color')
,否则您将看到一些ANSI转义序列,而不是彩色输出。
答案 5 :(得分:2)
相比这里列出的方法,我更喜欢系统自带的方法。 在这里,我提供了一个更好的方法,无需第三方库。
class colors: # You may need to change color settings
RED = '\033[31m'
ENDC = '\033[m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
print(colors.RED + "something you want to print in red color" + colors.ENDC)
print(colors.GREEN + "something you want to print in green color" + colors.ENDC)
print("something you want to print in system default color")
更多颜色代码,参考:Printing Colored Text in Python
尽情享受吧!
答案 6 :(得分:0)
ansicolors库又如何呢?您可以简单地做到:
from colors import color, red, blue
# common colors
print(red('This is red'))
print(blue('This is blue'))
# colors by name or code
print(color('Print colors by name or code', 'white', '#8a2be2'))
答案 7 :(得分:0)
Color_Console库相对易于使用。安装此库,以下代码将为您提供帮助。
from Color_Console import *
ctext("This will be printed" , "white" , "blue")
The first argument is the string to be printed, The second argument is the color of
the text and the last one is the background color.
最新版本的Color_Console允许您传递在指定的延迟时间后会更改的颜色列表或字典。
此外,他们在所有功能方面都有很好的文档。