]> SALOME platform Git repositories - modules/gui.git/blobdiff - tools/PyInterp/src/PyInterp_Interp.cxx
Salome HOME
Merge remote-tracking branch 'origin/V8_3_BR' into ngr/python3_dev
[modules/gui.git] / tools / PyInterp / src / PyInterp_Interp.cxx
index 200649073b1b9596541e719825ed09b1b153d990..1caeece65800fefec8a54e01c1a29c13f06eb593 100644 (file)
@@ -26,7 +26,7 @@
 #include "PyInterp_Utils.h"
 
 #include <pythread.h>
-#include <cStringIO.h>
+//#include <cStringIO.h>
 #include <structmember.h>
 #include <string>
 #include <vector>
@@ -93,8 +93,8 @@ static PyMemberDef PyStdOut_memberlist[] = {
 static PyTypeObject PyStdOut_Type = {
   /* The ob_type field must be initialized in the module init function
    * to be portable to Windows without using C++. */
-  PyObject_HEAD_INIT(NULL)
-  0,                            /*ob_size*/
+  PyVarObject_HEAD_INIT(NULL, 0)
+  /*0,*/                            /*ob_size*/
   "PyOut",                      /*tp_name*/
   sizeof(PyStdOut),             /*tp_basicsize*/
   0,                            /*tp_itemsize*/
@@ -242,9 +242,16 @@ void PyInterp_Interp::initPython()
 {
   if (!Py_IsInitialized()){
     // Python is not initialized
-    Py_SetProgramName(_argv[0]);
+    wchar_t **changed_argv = new wchar_t*[_argc]; // Setting arguments
+    size_t mbslen;
+    for (int i = 0; i < _argc; i++)
+    {
+      changed_argv[i] = Py_DecodeLocale(_argv[i], NULL);
+    }
+   
+    Py_SetProgramName(changed_argv[0]);
     Py_Initialize(); // Initialize the interpreter
-    PySys_SetArgv(_argc, _argv);
+    PySys_SetArgv(_argc, changed_argv);
 
     PyEval_InitThreads(); // Create (and acquire) the Python global interpreter lock (GIL)
     PyEval_SaveThread(); // release safely GIL
@@ -342,7 +349,7 @@ static int run_command(const char *command, PyObject * global_ctxt, PyObject * l
     return 1;
   }
   else {
-    PyObjWrapper r(PyEval_EvalCode((PyCodeObject *)(void *)v,global_ctxt, local_ctxt));
+    PyObjWrapper r(PyEval_EvalCode((PyObject *)(void *)v,global_ctxt, local_ctxt));
     if(!r) {
       // Execution error. We return -1
       PyErr_Print();