我希望(仅出于调试目的)能够更改打印在上下文中的工作方式
def printing_foo(a):
print(a)
return a
print("{")
with print_prefix(" " * 4):
list(map(printing_foo, range(4)))
print("}")
会产生:
{
0
1
2
3
}
就像您可以为小数设置本地上下文一样。
还是我必须编写自己的上下文相关打印并导入并在所有模块中使用它?
您可以使用上下文管理器捕获sys.stdout
,然后在print()
写入的内容之前添加前缀:
from contextlib import contextmanager
import sys
class Prefixer(object):
def __init__(self, prefix, orig):
self.prefix = prefix
self.orig = orig
def write(self, text):
self.orig.write(self.prefix + text)
def __getattr__(self, attr):
return getattr(self.orig, attr)
@contextmanager
def prefix_stdout(prefix):
current_out = sys.stdout
try:
sys.stdout = Prefixer(prefix, current_out)
yield
finally:
sys.stdout = current_out
并用作:
with prefix_stdout('Prefixed: '):
print('Hello world!')
但要考虑到print()
调用通常将数据stdout
分别写入不同的块中;最后的换行符是单独的写操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句