X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FContainer_init_python.cxx;h=dad0be21b03f3fe07fbd07f1c996baa62304b875;hb=52111d0ad7a0d8acccc1bb4e49bb5877d949b844;hp=7a4e585275ec41032421a6703d2b045ddd242362;hpb=1bd1d38e86c39b13e265f8ff534fc1463c25fef3;p=modules%2Fkernel.git diff --git a/src/Container/Container_init_python.cxx b/src/Container/Container_init_python.cxx index 7a4e58527..dad0be21b 100644 --- a/src/Container/Container_init_python.cxx +++ b/src/Container/Container_init_python.cxx @@ -1,58 +1,67 @@ -// SALOME Container : implementation of container and engine for Kernel +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : Container_init_python.cxx -// Author : Paul RASCLE, EDF -// Module : KERNEL -// $Header$ -#include "Container_init_python.hxx" +#include +#ifndef WIN32 + #include +#endif +#include #include "utilities.h" -using namespace std; - -PyThreadState *KERNEL_PYTHON::_gtstate = 0; -PyObject *KERNEL_PYTHON::salome_shared_modules_module = NULL; -PyInterpreterState *KERNEL_PYTHON::_interp = NULL; +#include "Container_init_python.hxx" void KERNEL_PYTHON::init_python(int argc, char **argv) { if (Py_IsInitialized()) { MESSAGE("Python already initialized"); - SCRUTE(KERNEL_PYTHON::_gtstate); return; } MESSAGE("================================================================="); MESSAGE("Python Initialization..."); MESSAGE("================================================================="); - Py_SetProgramName(argv[0]); + // set stdout to line buffering (aka C++ std::cout) + setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); + char* salome_python=getenv("SALOME_PYTHON"); + if(salome_python != 0) + Py_SetProgramName(salome_python); Py_Initialize(); // Initialize the interpreter PySys_SetArgv(argc, argv); - KERNEL_PYTHON::_interp = PyThreadState_Get()->interp; + PyRun_SimpleString("import threading\n"); + // VSR (22/09/2016): This is a workaround to prevent invoking qFatal() from PyQt5 + // causing application aborting + std::string script; + script += "def _custom_except_hook(exc_type, exc_value, exc_traceback):\n"; + script += " import sys\n"; + script += " sys.__excepthook__(exc_type, exc_value, exc_traceback)\n"; + script += " pass\n"; + script += "\n"; + script += "import sys\n"; + script += "sys.excepthook = _custom_except_hook\n"; + script += "del _custom_except_hook, sys\n"; + int res = PyRun_SimpleString(script.c_str()); + // VSR (22/09/2016): end of workaround PyEval_InitThreads(); // Create (and acquire) the interpreter lock - ASSERT(!KERNEL_PYTHON::_gtstate); - KERNEL_PYTHON::_gtstate = PyEval_SaveThread(); // Release global thread state - SCRUTE(KERNEL_PYTHON::_gtstate); + PyThreadState *pts = PyGILState_GetThisThreadState(); + PyEval_ReleaseThread(pts); }