123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- from __future__ import print_function # PY2
- import __main__
- import code
- import sys
- from .info import PY2
- def print_banner(file=sys.stderr):
- print("Python {} on {}".format(sys.version, sys.platform), file=file)
- print('Type "help", "copyright", "credits" or "license" for more information.', file=file)
- # PY3 # class InteractiveConsole(code.InteractiveConsole):
- class InteractiveConsole(code.InteractiveConsole, object):
- # code.InteractiveConsole without banner
- # exits on EOF
- # also more robust treating of sys.ps1, sys.ps2
- # prints prompt into stderr rather than stdout
- # flushes sys.stderr and sys.stdout
-
- def __init__(self, locals=None, filename="<stdin>"):
- self.done = False
- # PY3 # super().__init__(locals, filename)
- super(InteractiveConsole, self).__init__(locals, filename)
-
- def raw_input(self, prompt=""):
- sys.stderr.write(prompt)
- if PY2:
- return raw_input()
- else:
- return input()
-
- def runcode(self, code):
- # PY3 # super().runcode(code)
- super(InteractiveConsole, self).runcode(code)
- sys.stderr.flush()
- sys.stdout.flush()
-
- def interact(self):
- #sys.ps1 = "~>> "
- #sys.ps2 = "~.. "
-
- try:
- sys.ps1
- except AttributeError:
- sys.ps1 = ">>> "
-
- try:
- sys.ps2
- except AttributeError:
- sys.ps2 = "... "
-
- more = 0
- while not self.done:
- try:
- if more:
- try:
- prompt = sys.ps2
- except AttributeError:
- prompt = ""
- else:
- try:
- prompt = sys.ps1
- except AttributeError:
- prompt = ""
-
- try:
- line = self.raw_input(prompt)
- except EOFError:
- self.on_EOF()
- else:
- more = self.push(line)
-
- except KeyboardInterrupt:
- self.write("\nKeyboardInterrupt\n")
- self.resetbuffer()
- more = 0
-
- def on_EOF(self):
- self.write("\n")
- # PY3 # raise SystemExit from None
- raise SystemExit
- running_console = None
- def enable():
- global running_console
-
- if running_console is not None:
- raise RuntimeError("interactive console already running")
- else:
- running_console = InteractiveConsole(__main__.__dict__)
- running_console.interact()
- def disable():
- global running_console
-
- if running_console is None:
- raise RuntimeError("interactive console is not running")
- else:
- running_console.done = True
- running_console = None
|