summaryrefslogtreecommitdiff
path: root/lib/utils/io.py
blob: 26ee72a544e27cac93f0af567cbc703acb0f5bab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Authors: see git history
#
# Copyright (c) 2010 Authors
# Licensed under the GNU GPL version 3.0 or later.  See the file LICENSE for details.

import os
import sys
from io import StringIO


def save_stderr():
    # GTK likes to spam stderr, which inkscape will show in a dialog.
    with open(os.devnull, 'w') as null:
        sys.stderr_dup = os.dup(sys.stderr.fileno())
        sys.real_stderr = os.fdopen(sys.stderr_dup, 'w', encoding='utf-8')
        os.dup2(null.fileno(), 2)
        sys.stderr = StringIO()


def restore_stderr():
    os.dup2(sys.stderr_dup, 2)
    sys.real_stderr.write(sys.stderr.getvalue())
    sys.stderr = sys.real_stderr

# It's probably possible to generalize this code, but when I tried,
# the result was incredibly unreadable.


def save_stdout():
    with open(os.devnull, 'w') as null:
        sys.stdout_dup = os.dup(sys.stdout.fileno())
        sys.real_stdout = os.fdopen(sys.stdout_dup, 'w')
        os.dup2(null.fileno(), 1)
        sys.stdout = StringIO()


def restore_stdout():
    os.dup2(sys.stdout_dup, 1)
    sys.real_stdout.write(sys.stdout.getvalue())
    sys.stdout = sys.real_stdout