You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.1 KiB
Python
50 lines
1.1 KiB
Python
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
|
|
from contextlib import contextmanager
|
|
from io import StringIO
|
|
import sys
|
|
import os
|
|
|
|
|
|
class StreamTTY(StringIO):
|
|
def isatty(self):
|
|
return True
|
|
|
|
class StreamNonTTY(StringIO):
|
|
def isatty(self):
|
|
return False
|
|
|
|
@contextmanager
|
|
def osname(name):
|
|
orig = os.name
|
|
os.name = name
|
|
yield
|
|
os.name = orig
|
|
|
|
@contextmanager
|
|
def replace_by(stream):
|
|
orig_stdout = sys.stdout
|
|
orig_stderr = sys.stderr
|
|
sys.stdout = stream
|
|
sys.stderr = stream
|
|
yield
|
|
sys.stdout = orig_stdout
|
|
sys.stderr = orig_stderr
|
|
|
|
@contextmanager
|
|
def replace_original_by(stream):
|
|
orig_stdout = sys.__stdout__
|
|
orig_stderr = sys.__stderr__
|
|
sys.__stdout__ = stream
|
|
sys.__stderr__ = stream
|
|
yield
|
|
sys.__stdout__ = orig_stdout
|
|
sys.__stderr__ = orig_stderr
|
|
|
|
@contextmanager
|
|
def pycharm():
|
|
os.environ["PYCHARM_HOSTED"] = "1"
|
|
non_tty = StreamNonTTY()
|
|
with replace_by(non_tty), replace_original_by(non_tty):
|
|
yield
|
|
del os.environ["PYCHARM_HOSTED"]
|