summaryrefslogtreecommitdiff
path: root/lib/utils/io.py
blob: f51f629c0be1a334d095716a98c7c3f55e839fc8 (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
import os
import sys
from cStringIO import StringIO


def save_stderr():
    # GTK likes to spam stderr, which inkscape will show in a dialog.
    null = open(os.devnull, 'w')
    sys.stderr_dup = os.dup(sys.stderr.fileno())
    sys.real_stderr = os.fdopen(sys.stderr_dup, 'w')
    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():
    null = open(os.devnull, 'w')
    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