[Python.NET] RunString does not work

Seshagiri Cherukuri seshagiri.cherukuri at gmail.com
Mon Mar 5 19:41:58 CET 2007


thanks for your reply. I had the necessary imports in place but was still
seeing the error.
The following code from Michael Eddington resolved the issue (I think the
current problem is because of the dictionary being used)

public static PyObject RunString(string code)
       {
               PyObject module = ImportModule("__main__");
               PyDict globals = new PyDict(Runtime.PyModule_GetDict(
module.Handle));

       if (locals == null)
       {
           locals = new PyDict(Runtime.PyDict_New());
       }

                       Runtime.Incref(globals.Handle);
                       Runtime.Incref(locals.Handle);
       IntPtr result = Runtime.PyRun_String(code, (IntPtr)257,
globals.Handle, locals.Handle);

       if (result == IntPtr.Zero)
       {
           return null;
       }

       return new PyObject(result);
   }

rgd

Sesh

On 3/5/07, Brian Lloyd <brian.lloyd at revolution.com> wrote:
>
> FYI, if you are getting a NameError using RunString that usually means
> that the string
> you run needs to do some imports — remember that RunString creates
> (essentially) a
> totally new global local namespace, so you'll need to import any names you
> need in
> your code snippet.
>
> e.g.
>
>   CLR.Food.SpamAndEggs.cook()
>
>   ...will fail
>
> but
>
>   import CLR
>   import CLR.Food
>   CLR.Food.SpamAndEggs.cook()
>
>   ...should work
>
>
> hope this helps,
>
> -Brian
>
>
> On 3/4/07 4:37 AM, "Seshagiri Cherukuri" <seshagiri.cherukuri at gmail.com>
> wrote:
>
>  hi All,
>
> I have embedded pythonnet into my C# application and this works great as
> far as creating .net objects from python, executing methods etc.
> Here I am using the RunSimpleString (the PyRun_SimpleString) wrapper to
> send commands from the C# application to the pythonnet.
>
> However I am facing the following problems:
>
> 1. After RunSimpleString, PyErr_Occurred or PyErr_Fetch are not able to
> detect any exceptions even if they did occur
> - for example, consider the code - curErr = PythonEngine.RunSimpleString(
> "10/0\n" );
> - this code does return a -1 value indicating error.
> - however after this none of PyErr_Occurred or PyErr_Fetch do not detect
> this error
> - from python documentation it looks like there is no way to obtain the
> exception information
>
> 2. using RunString
> - because of above problem I want to send a multi-line code including a
> try-except: block
> - I have tried using RunString with all the three modes - Py_eval_input,
> Py_single_input and Py_file_input
> - The RunString works only if the code does not have any .net objects or
> does not include any .net exceptions
> - If the code sent to RunString includes a .net object e.g. obj, then
> RunString always returns in NameError, obj is not defined
>
> 3. Strangely, if I run the console application, it is able to work with
> .net exceptions - both .net and user defined exceptions
>
> 4. Is this because of the new dictionary created while in RunString?
>
> thanks
>
> Sesh Cherukuri
>
> ------------------------------
> _________________________________________________
> Python.NET mailing list - PythonDotNet at python.org
> http://mail.python.org/mailman/listinfo/pythondotnet
>
>
>


-- 
Seshagiri Rao Cherukuri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/pythondotnet/attachments/20070305/d82c0d72/attachment.html 


More information about the PythonDotNet mailing list