Format: text/x-python
⬇ Download File (1.1 KB)
   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