#include <SalomeApp_PyInterp.h>

Public Member Functions | |
| SalomeApp_PyInterp () | |
| virtual | ~SalomeApp_PyInterp () |
| virtual void | initPython () |
| void | initialize () |
| Initialize embedded interpreter. | |
| virtual int | run (const char *command) |
| Run Python command. | |
| PyLockWrapper | GetLockWrapper () |
| Get Python GIL wrapper. | |
| std::string | getbanner () |
| Get embedded Python interpreter banner. | |
| void | setverrcb (PyOutChanged *, void *) |
| Set Python standard error device hook. | |
| void | setvoutcb (PyOutChanged *, void *) |
| Set Python standard output device hook. | |
| const char * | getPrevious () |
| Get previous command in the commands history. | |
| const char * | getNext () |
| Get next command in the commands history. | |
Static Public Attributes | |
| static int | _argc = 1 |
| static char * | _argv [] = {(char*)""} |
| static PyObject * | builtinmodule = NULL |
| static PyThreadState * | _gtstate = NULL |
| static PyInterpreterState * | _interp = NULL |
Protected Member Functions | |
| virtual bool | initContext () |
| virtual int | beforeRun () |
| virtual bool | initState () |
| Initialize internal Python interpreter state. | |
| int | simpleRun (const char *command, const bool addToHistory=true) |
| Run Python command (used internally). | |
| virtual bool | initRun () |
| Initialize run command. | |
Protected Attributes | |
| PyThreadState * | _tstate |
| PyObject * | _vout |
| PyObject * | _verr |
| PyObject * | _g |
| PyObject * | _codeop |
| std::list< std::string > | _history |
| std::list< std::string >::iterator | _ith |
Private Attributes | |
| bool | myFirstRun |
EDF-CCAR When SALOME uses multi Python interpreter feature, Every study has its own interpreter and thread state (_tstate = Py_NewInterpreter()) This is fine because every study has its own modules (sys.modules) stdout and stderr BUT some Python modules must be imported only once. In multi interpreter context Python modules (*.py) are imported several times. The pyqt module must be imported only once because it registers classes in a C module. It's quite the same with omniorb modules (internals and generated with omniidl) This problem is handled with "shared modules" defined in salome_shared_modules.py These "shared modules" are imported only once and only copied in all the other interpreters BUT it's not the only problem. Every interpreter has its own __builtin__ module. That's fine but if we have copied some modules and imported others problems may arise with operations that are not allowed in restricted execution environment. So we must impose that all interpreters have identical __builtin__ module. That's all, for the moment ...
| SalomeApp_PyInterp::SalomeApp_PyInterp | ( | ) |
constructor : multi Python interpreter, one per SALOME study. calls initialize method defined in base class, which calls virtual methods initstate & initcontext redefined here.
| SalomeApp_PyInterp::~SalomeApp_PyInterp | ( | ) | [virtual] |
Destructor.
| void SalomeApp_PyInterp::initPython | ( | ) | [virtual] |
Do nothing The initialization has been done in main
Reimplemented from PyInterp_Interp.
References PyInterp_Interp._gtstate, and PyInterp_Interp._interp.
| bool SalomeApp_PyInterp::initContext | ( | ) | [protected, virtual] |
The GIL is assumed to be held It is the caller responsability caller to acquire the GIL It will still be held on initContext output
Reimplemented from PyConsole_Interp.
References PyConsole_Interp.initContext(), and salome_shared_modules_module.
| int SalomeApp_PyInterp::beforeRun | ( | ) | [protected, virtual] |
Called before each Python command running.
Reimplemented from PyInterp_Interp.
References myFirstRun, TestSalomeApp.ret, and PyInterp_Interp.simpleRun().
| bool PyConsole_Interp::initState | ( | ) | [protected, virtual, inherited] |
When calling initState the GIL is not held It must not be held on exit
true on success Implements PyInterp_Interp.
References PyInterp_Interp._argc, PyInterp_Interp._argv, PyInterp_Interp._interp, PyInterp_Interp._tstate, and PyInterp_Interp.builtinmodule.
| void PyInterp_Interp::initialize | ( | ) | [inherited] |
This method shoud be called after construction of the interpreter. The method initialize() calls virtuals methods
References PyInterp_Interp._history, PyInterp_Interp._ith, PyInterp_Interp._tstate, PyInterp_Interp._verr, PyInterp_Interp._vout, PyInterp_Interp.initContext(), PyInterp_Interp.initPython(), PyInterp_Interp.initRun(), PyInterp_Interp.initState(), and newPyStdOut().
| int PyInterp_Interp::run | ( | const char * | command | ) | [virtual, inherited] |
| command | Python command |
Reimplemented in SALOME_PYQT_PyInterp.
References PyInterp_Interp.beforeRun(), and PyInterp_Interp.simpleRun().
| PyLockWrapper PyInterp_Interp::GetLockWrapper | ( | ) | [inherited] |
References PyInterp_Interp._interp, PyInterp_Interp._tstate, and currentThreadMap.
| std::string PyInterp_Interp::getbanner | ( | ) | [inherited] |
| void PyInterp_Interp::setverrcb | ( | PyOutChanged * | cb, |
| void * | data | ||
| ) | [inherited] |
| cb | callback function |
| data | callback function parameters |
References PyInterp_Interp._verr.
| void PyInterp_Interp::setvoutcb | ( | PyOutChanged * | cb, |
| void * | data | ||
| ) | [inherited] |
| cb | callback function |
| data | callback function parameters |
References PyInterp_Interp._vout.
| const char * PyInterp_Interp::getPrevious | ( | ) | [inherited] |
References PyInterp_Interp._history, PyInterp_Interp._ith, and BEGIN_HISTORY_PY.
| const char * PyInterp_Interp::getNext | ( | ) | [inherited] |
References PyInterp_Interp._history, PyInterp_Interp._ith, and TOP_HISTORY_PY.
| int PyInterp_Interp::simpleRun | ( | const char * | command, |
| const bool | addToHistory = true |
||
| ) | [protected, inherited] |
| command | Python command |
| addToHistory | if true (default), the command is added to the commands history |
References PyInterp_Interp._g, PyInterp_Interp._history, PyInterp_Interp._ith, PyInterp_Interp._verr, PyInterp_Interp._vout, and compile_command().
| bool PyInterp_Interp::initRun | ( | ) | [protected, virtual, inherited] |
This method is used to prepare interpreter for running Python commands.
true on success and false on error bool SalomeApp_PyInterp.myFirstRun [private] |
int PyInterp_Interp::_argc = 1 [static, inherited] |
char * PyInterp_Interp::_argv = {(char*)""} [static, inherited] |
PyObject * PyInterp_Interp::builtinmodule = NULL [static, inherited] |
PyThreadState * PyInterp_Interp::_gtstate = NULL [static, inherited] |
PyInterpreterState * PyInterp_Interp::_interp = NULL [static, inherited] |
PyThreadState* PyInterp_Interp._tstate [protected, inherited] |
PyObject* PyInterp_Interp._vout [protected, inherited] |
PyObject* PyInterp_Interp._verr [protected, inherited] |
PyObject* PyInterp_Interp._g [protected, inherited] |
PyObject* PyInterp_Interp._codeop [protected, inherited] |
std::list<std::string> PyInterp_Interp._history [protected, inherited] |
std::list<std::string>::iterator PyInterp_Interp._ith [protected, inherited] |