【发布时间】:2011-09-05 22:56:21
【问题描述】:
我怎样才能装饰一个函数,使它打印到stdout 的任何东西都是绿色,而它打印到stderr 的任何东西都是红色?我有可用的termcolor 模块。
Bonus karma:如何将参数传递给装饰器以指定颜色,默认为红色和绿色?
【问题讨论】:
-
装饰器影响被装饰的功能,而不是完全不相关的功能,例如
sys.stdout.write。定义write_to_stdout(line, color=GREEN)并使用它代替print要容易得多。您可以在函数内部替换标准输出,但这看起来很不合时宜并且会与线程中断。 -
@Jochen:在没有正确同步的情况下从多个线程打印到同一个流将导致输出混乱,无论 stdout 是否被覆盖,因此它是无关紧要的,并且创建一个特殊的 write_to_stdout() 函数不会解决从脚本调用的(Python)库打印到标准输出的情况。至于hackiness,每次使用管道时都会重定向stdout。这是一种完全正常的方法。