public synchronized boolean push(String line, JythonScript script)
			throws PyException, IllegalStateException {

		if (cleanedUp) {
			throw new IllegalStateException(
				"Ghidra python interpreter has already been cleaned up.");
		}

		initializePythonPath();
		injectScriptHierarchy(script);

		if (buffer.length() > 0) {
			buffer.append("\n");
		}
		buffer.append(line);
		Py.getThreadState().tracefunc = interruptTraceFunction;
		Py.getSystemState().stderr = getSystemState().stderr; // needed to properly display SyntaxError
		boolean more;
		try {
			more = runsource(buffer.toString(), "python");
			getSystemState().stderr.invoke("flush");
			if (!more) {
				resetbuffer();
			}
		}
		catch (PyException pye) {
			resetbuffer();
			throw pye;
		}

		return more;
	}
Pushes (executes) a line of Python to the interpreter.

@param line the line of Python to push to the interpreter
@param script a PythonScript from which we load state (or null)
@return true if more input is needed before execution can occur
@throws PyException if an unhandled exception occurred while executing the line of python
@throws IllegalStateException if this interpreter has been cleaned up.
Ghidra/Features/Jython/src/main/java/ghidra/jython/GhidraJythonInterpreter.java