Module src.jupyter_process_manager.function_wrapper

Decorators and wrappers to redirect streams for processes

Expand source code
"""Decorators and wrappers to redirect streams for processes"""
# Standard library imports
import os
import sys
import logging
import atexit
# from contextlib import redirect_stdout, redirect_stderr

# Third party imports
from char import char

# Local imports

DICT_STREAMS_STATE = {}

def return_stdout_stderr_to_usual_state():
    if (sys.stdout != DICT_STREAMS_STATE["stdout"]):
        sys.stdout.close()
        sys.stdout = DICT_STREAMS_STATE["stdout"]
    if (sys.stderr != DICT_STREAMS_STATE["stderr"]):
        sys.stderr.close()
        sys.stderr = DICT_STREAMS_STATE["stderr"]


@char
def redirect_stdout_stderr_to_files(
        str_stdout_file,
        str_stderr_file,
):
    """"""
    DICT_STREAMS_STATE["stdout"] = sys.stdout
    sys.stdout = open(str_stdout_file, "w", buffering=1)
    DICT_STREAMS_STATE["stderr"] = sys.stderr
    sys.stderr = open(str_stderr_file, 'w', buffering=1)
    atexit.register(return_stdout_stderr_to_usual_state)


@char
def wrapped_func(
        str_stdout_file,
        str_stderr_file,
        func_to_process,
        *args,
        **kwargs
):
    """"""
    redirect_stdout_stderr_to_files(
        str_stdout_file,
        str_stderr_file,
    )
    func_to_process(*args, **kwargs)
    return_stdout_stderr_to_usual_state()

Functions

def redirect_stdout_stderr_to_files(str_stdout_file, str_stderr_file)
Expand source code
@char
def redirect_stdout_stderr_to_files(
        str_stdout_file,
        str_stderr_file,
):
    """"""
    DICT_STREAMS_STATE["stdout"] = sys.stdout
    sys.stdout = open(str_stdout_file, "w", buffering=1)
    DICT_STREAMS_STATE["stderr"] = sys.stderr
    sys.stderr = open(str_stderr_file, 'w', buffering=1)
    atexit.register(return_stdout_stderr_to_usual_state)
def return_stdout_stderr_to_usual_state()
Expand source code
def return_stdout_stderr_to_usual_state():
    if (sys.stdout != DICT_STREAMS_STATE["stdout"]):
        sys.stdout.close()
        sys.stdout = DICT_STREAMS_STATE["stdout"]
    if (sys.stderr != DICT_STREAMS_STATE["stderr"]):
        sys.stderr.close()
        sys.stderr = DICT_STREAMS_STATE["stderr"]
def wrapped_func(str_stdout_file, str_stderr_file, func_to_process, *args, **kwargs)
Expand source code
@char
def wrapped_func(
        str_stdout_file,
        str_stderr_file,
        func_to_process,
        *args,
        **kwargs
):
    """"""
    redirect_stdout_stderr_to_files(
        str_stdout_file,
        str_stderr_file,
    )
    func_to_process(*args, **kwargs)
    return_stdout_stderr_to_usual_state()