Class InteractiveInterpreter

java.lang.Object
org.python.util.PythonInterpreter
org.python.util.InteractiveInterpreter
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
InteractiveConsole

public class InteractiveInterpreter extends PythonInterpreter
This class provides the interface for compiling and running code that supports an interactive interpreter.
  • Field Details

  • Constructor Details

    • InteractiveInterpreter

      public InteractiveInterpreter()
      Construct an InteractiveInterpreter with all default characteristics: default state (from Py.getSystemState()), and a new empty dictionary of local variables.
    • InteractiveInterpreter

      public InteractiveInterpreter(PyObject locals)
      Construct an InteractiveInterpreter with state (from Py.getSystemState()), and the specified dictionary of local variables.
      Parameters:
      locals - dictionary to use, or if null, a new empty one will be created
    • InteractiveInterpreter

      public InteractiveInterpreter(PyObject locals, PySystemState systemState)
      Construct an InteractiveInterpreter with, and system state the specified dictionary of local variables.
      Parameters:
      locals - dictionary to use, or if null, a new empty one will be created
      systemState - interpreter state, or if null use Py.getSystemState()
  • Method Details

    • runsource

      public boolean runsource(String source)
      Compile and run some source in the interpreter, in the mode CompileMode.single which is used for incremental compilation at the interactive console, known as <input>.
      Parameters:
      source - Python code
      Returns:
      true to indicate a partial statement was entered
    • runsource

      public boolean runsource(String source, String filename)
      Compile and run some source in the interpreter, in the mode CompileMode.single which is used for incremental compilation at the interactive console.
      Parameters:
      source - Python code
      filename - name with which to label this console input (e.g. in error messages).
      Returns:
      true to indicate a partial statement was entered
    • runsource

      public boolean runsource(String source, String filename, CompileMode kind)
      Compile and run some source in the interpreter, according to the CompileMode given. This method supports incremental compilation and interpretation through the return value, where true signifies that more input is expected in order to complete the Python statement. An interpreter can use this to decide whether to use sys.ps1 (">>> ") or sys.ps2 ("... ") to prompt the next line. The arguments are the same as the mandatory ones in the Python compile() command.

      One the following can happen:

      1. The input is incorrect; compilation raised an exception (SyntaxError or OverflowError). A syntax traceback will be printed by calling showexception(PyException). Return is false.
      2. The input is incomplete, and more input is required; compilation returned no code. Nothing happens. Return is true.
      3. The input is complete; compilation returned a code object. The code is executed by calling runcode(PyObject) (which also handles run-time exceptions, except for SystemExit). Return is false.
      Parameters:
      source - Python code
      filename - name with which to label this console input (e.g. in error messages).
      kind - of compilation required: CompileMode.eval, CompileMode.exec or CompileMode.single
      Returns:
      true to indicate a partial statement was provided
    • runcode

      public void runcode(PyObject code)
      Execute a code object. When an exception occurs, showexception(PyException) is called to display a stack trace, except in the case of SystemExit, which is re-raised.

      A note about KeyboardInterrupt: this exception may occur elsewhere in this code, and may not always be caught. The caller should be prepared to deal with it.

    • showexception

      public void showexception(PyException exc)
    • write

      public void write(String data)
    • resetbuffer

      public void resetbuffer()
    • interrupt

      public void interrupt(ThreadState ts)
      Pause the current code, sneak an exception raiser into sys.trace_func, and then continue the code hoping that Jython will get control to do the break;