semvec/pypi-packages huggingface dataset:
tee 0.0.3
Python library to tee stderr/stdout temporarily
License: MIT License
Keywords: tee

python-tee
==========

|Build Status| |PyPI version|

Python library to tee stderr / stdout to a file

Installation
------------

.. code:: bash

    pip install tee

Quick Start
-----------

``tee_test.py``

.. code:: python

    import sys
    from tee import StdoutTee, StderrTee

    with StdoutTee("mystdout.txt"), StderrTee("mystderr.txt"):
        sys.stdout.write("[stdout] hello\n")
        sys.stderr.write("[stderr] hello\n")
        sys.stdout.write("[stdout] world\n")
        sys.stderr.write("[stderr] world\n")

    sys.stdout.write("[stdout] not going to be written to file\n")
    sys.stderr.write("[stderr] not going to be written to file\n")

.. code:: bash

    $ python tee_test.py

    [stdout] hello
    [stderr] hello
    [stdout] world
    [stderr] world
    [stdout] not going to be written to file
    [stderr] not going to be written to file

    $ cat mystdout.txt 
    [stdout] hello
    [stdout] world

    $ cat mystderr.txt 
    [stderr] hello
    [stderr] world

Filters
-------

StdoutTee and StderrTee take filters as parameters which run before
writing to a file or the stream. These filters are callables that take
the message to be written as input and return either None or a new
message.

I find them particularly useful when you want to write colorized output
to the stream, but strip out the control characters when writing to a
file, especially when using fabric.

.. code:: python

    import re
    import tee
    from fabric.api import run

    def _remove_control_chars(message):
        return re.sub(r'(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]', "", message)

    def echo_color():
        with tee.StdoutTee("fabout.txt", mode="a", file_filters=[_remove_control_chars]):
            run("""echo -e "\E[1;32mHello World \E[4;31mLets add some\E[0m\E[1;34m color" && tput sgr0""")

.. code:: bash

    fab -H localhost echo_color

.. |Build Status| image:: https://travis-ci.org/algrebe/python-tee.svg?branch=master
   :target: https://travis-ci.org/algrebe/python-tee
.. |PyPI version| image:: https://badge.fury.io/py/tee.svg
   :target: https://badge.fury.io/py/tee