跳到主要内容
版本:0.3.x

捕获标准输出(stdout)

下例展示了获取python的stdout和stderr的做法:

basic.py
from contextlib import redirect_stdout, redirect_stderr
import syncstream

# 初始化缓存。
buffer = syncstream.LineBuffer(10)

# 使用contextlib重定向stdout和stderr。
with redirect_stdout(buffer), redirect_stderr(buffer):
for i in range(20):
print('Message', f'"{i:02d}".')
print('Line break\nin middle.', end='')
print('No line break.', end='')

# 检查结果。
messages = buffer.read()
for mitem in messages:
print(mitem)

定义缓存时,将缓存的最大行数设定为10

buffer = syncstream.LineBuffer(10)

该缓存实例可以传递给重定向上下文。在上下文内部,print函数会重定向到缓存上。每当检测到新行,就会在缓存中创建一条新的记录项。用来检测新行数的规则,和标准库中的str.splitlines做法相同。

捕获所有行之后,可以透过以下方式返回结果

messages = buffer.read()

messages的各项均是str,其意义是上下文中所捕获的各行。