wurlitzer

Capture C-level output in context managers

MIT 19 个版本 Python >=3.5
Min RK <benjaminrk@gmail.com>
安装
pip install wurlitzer
poetry add wurlitzer
pipenv install wurlitzer
conda install wurlitzer
描述

Wurlitzer

Capture C-level stdout/stderr pipes in Python via os.dup2.

For more details on why this is needed, please read this blog post.

Install

pip install wurlitzer

Usage

Capture stdout/stderr in pipes:

from wurlitzer import pipes

with pipes() as (out, err):
    call_some_c_function()

stdout = out.read()

Capture both stdout and stderr in a single StringIO object:

from io import StringIO
from wurlitzer import pipes, STDOUT

out = StringIO()
with pipes(stdout=out, stderr=STDOUT):
    call_some_c_function()

stdout = out.getvalue()

Forward C-level stdout/stderr to Python sys.stdout/stderr, which may already be forwarded somewhere by the environment, e.g. IPython:

from wurlitzer import sys_pipes

with sys_pipes():
    call_some_c_function()

Forward C-level output to Python Logger objects (new in 3.1). Each line of output will be a log message.

from wurlitzer import pipes, STDOUT
import logging

logger = logging.getLogger("my.log")
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler("mycode.log"))

with pipes(logger, stderr=STDOUT):
    call_some_c_function()

Forward C-level output to a file (avoids GIL issues with a background thread, new in 3.1):

from wurlitzer import pipes, STDOUT

with open("log.txt", "ab") as f, pipes(f, stderr=STDOUT):
    blocking_gil_holding_function()

Or even simpler, enable it as an IPython extension:

%load_ext wurlitzer

To forward all C-level output to IPython (e.g. Jupyter cell output) during execution.

Acknowledgments

This package is based on stuff we learned with @takluyver and @karies while working on capturing output from the Cling Kernel for Jupyter.

Wurlitzer?!

Wurlitzer makes pipe organs. Get it? Pipes? Naming is hard.

版本列表
3.1.1 2024-06-12
3.1.0 2024-04-29
3.0.3 2022-12-01
3.0.2 2021-08-25
3.0.1 2021-08-24
3.0.0 2021-08-19
2.1.1 2021-07-21
2.1.0 2021-03-30
2.0.1 2020-07-06
2.0.0 2019-10-25
1.0.3 2019-06-13
1.0.2 2018-05-20
1.0.1 2018-01-22
1.0.0 2017-06-22
0.2.0 2016-03-14
0.1.2 2016-03-13
0.1.1 2016-03-09
0.1.0 2016-03-09