+++ /dev/null
-
-import code
-import sys
-import __main__
-
-
-def print_banner():
- print("Python {} on {}".format(sys.version, sys.platform))
- print('Type "help", "copyright", "credits" or "license" for more information.')
-
-class InteractiveConsole(code.InteractiveConsole):
- # 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
- super().__init__(locals, filename)
-
- def raw_input(self, prompt=""):
- sys.stderr.write(prompt)
- return input()
-
- def runcode(self, code):
- super().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")
- # sys.exit()
- raise SystemExit from None
-
-
-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
-