1 # Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. 2 from contextlib import contextmanager 3 from io import StringIO 4 import sys 5 import os 6 7 8 class StreamTTY(StringIO): 9 def isatty(self): 10 return True 11 12 class StreamNonTTY(StringIO): 13 def isatty(self): 14 return False 15 16 @contextmanager 17 def osname(name): 18 orig = os.name 19 os.name = name 20 yield 21 os.name = orig 22 23 @contextmanager 24 def replace_by(stream): 25 orig_stdout = sys.stdout 26 orig_stderr = sys.stderr 27 sys.stdout = stream 28 sys.stderr = stream 29 yield 30 sys.stdout = orig_stdout 31 sys.stderr = orig_stderr 32 33 @contextmanager 34 def replace_original_by(stream): 35 orig_stdout = sys.__stdout__ 36 orig_stderr = sys.__stderr__ 37 sys.__stdout__ = stream 38 sys.__stderr__ = stream 39 yield 40 sys.__stdout__ = orig_stdout 41 sys.__stderr__ = orig_stderr 42 43 @contextmanager 44 def pycharm(): 45 os.environ["PYCHARM_HOSTED"] = "1" 46 non_tty = StreamNonTTY() 47 with replace_by(non_tty), replace_original_by(non_tty): 48 yield 49 del os.environ["PYCHARM_HOSTED"] 50