Hi Michael - I assume you're running an older version of Python for NET? The current version has an implementation of RunString:
public static PyObject RunString(string code) { IntPtr globals = Runtime.PyEval_GetGlobals(); IntPtr locals = Runtime.PyDict_New(); IntPtr builtins = Runtime.PyEval_GetBuiltins(); Runtime.PyDict_SetItemString(locals, "__builtins__", builtins); IntPtr flag = (IntPtr)257; /* Py_file_input */ IntPtr result = Runtime.PyRun_String(code, flag, globals, locals); Runtime.Decref(locals); if (result == IntPtr.Zero) { return null; } return new PyObject(result); } The trick is that for various reasons you can't depend on the PyEval_GetLocals call to return anything meaningful, so you have to build the locals dict manually. HTH, Brian Lloyd [EMAIL PROTECTED] V.P. Engineering 540.361.1716 Zope Corporation http://www.zope.com > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Behalf Of Michael Eddington > Sent: Sunday, August 14, 2005 1:36 AM > To: pythondotnet@python.org > Subject: [Python.NET] Adding PyRun_String to Runtime > > > I would like to run Python strings and get an object return from .NET. > To this end I added PyRun_String to the Runtime object and another > method to PythonEngine ala the existing SimpleString implementation. > > Everything compiles, but Runtime.PyRun_String always returns a NULL, > and it does not look like the code is being run. > > Is there any trick to adding new methods to the Runtime? > > // From Runtime.cs > > [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl, > ExactSpelling=true, CharSet=CharSet.Ansi)] > internal unsafe static extern IntPtr > PyRun_String(string code, int start, IntPtr globals, > IntPtr locals); > > > // From Python.cs > > public static PyObject RunString(string code) > { > IntPtr globals = Runtime.PyEval_GetGlobals(); > IntPtr locals = Runtime.PyEval_GetLocals(); > IntPtr ret; > > ret = Runtime.PyRun_String(code, > 257,globals, locals); > > Runtime.Decref(globals); > Runtime.Decref(locals); > > if (ret == IntPtr.Zero) > { > throw new PythonException(); > } > > return new PyObject(ret); > } > _________________________________________________ > Python.NET mailing list - PythonDotNet@python.org > http://mail.python.org/mailman/listinfo/pythondotnet > _________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet