Sorry. One more. When my code then executes those callbacks, back into Python, it does so this way:
System.Console.WriteLine("Getting Projects"); List<libcontextutilsclient.ProjectContextSettings> ret = new List<libcontextutilsclient.ProjectContextSettings>(); //the things I expect python to give me back System.Console.WriteLine("Getting lock"); IntPtr p = this.Pedestal.GetPythonLock(); System.Console.WriteLine("Got Lock"); if (this.ProjectsRequested != null) { foreach (libcontextutils.GetProjectSettingsDelegate del in this.ProjectsRequested.GetInvocationList()) //looping through callbacks on delegate { System.Console.WriteLine("Calling Project Delegate"); ret.AddRange(del(projectsType, this)); //doing the callback, which is a python callback in truth. } } else { System.Console.Error.WriteLine("No delegates registered to ProjectsRequested Event."); } System.Console.WriteLine("Releasing lock"); this.Pedestal.ReleasePythonLock(p); System.Console.WriteLine("Released Lock"); return ret; On Mar 28, 2013, at 5:34 PM, "b...@fie.us" <b...@fie.us> wrote: > In my code I'm running: > > Python.Runtime.PythonEngine.Initialize(); > > I also have these defined: > > public void AddPythonPath(string path) > { > CheckInitPython(); > IntPtr l = Python.Runtime.PythonEngine.AcquireLock(); > Python.Runtime.PythonEngine.RunSimpleString("import sys"); > Python.Runtime.PythonEngine.RunSimpleString("sys.path.append(\"" > + path.Replace("\\", "\\\\") + "\")"); > Python.Runtime.PythonEngine.ReleaseLock(l); > } > > public Python.Runtime.PyObject ImportModule(string name) > { > CheckInitPython(); > IntPtr l = Python.Runtime.PythonEngine.AcquireLock(); > Python.Runtime.PyObject module = > Python.Runtime.PythonEngine.ImportModule(name); > Python.Runtime.PythonEngine.ReleaseLock(l); > if (module == null) > { > throw new libscclient.PythonModuleNotCreatedException(name); > } > return module; > } > > And when my code loads a "plugin" python module, it runs this: > > string pythonVersionBasePath = GetPythonCodeBaseVersionPath(); > //my dynamic plugin code. > string scriptName = GetPythonScriptName(); //also my dynamic > plugin code. > System.Console.WriteLine("importing module"); > Pedestal.AddPythonPath(pythonVersionBasePath); //calling code > above > Python.Runtime.PyObject module = > Pedestal.ImportModule(scriptName.Split(new char[] { '.' }, 2)[0]); //calling > code above > System.Console.WriteLine("module imported"); > IntPtr l = Pedestal.GetPythonLock(); > module.InvokeMethod(GetPythonInitMethodName(), new > Python.Runtime.PyObject[] { Python.Runtime.PyObject.FromManagedObject(this) > }); //calling a method by name. the name comes from my dynamic plugin code. > module.Dispose(); //I'm done with the module so I toss it. my > code here registers callbacks. > Pedestal.ReleasePythonLock(l); > > On Mar 28, 2013, at 2:09 PM, "lizy10b" <lizy...@126.com> wrote: > >> Thank you, Bradley. >> I found a simple sample code on the maillist. Now I could load and execute a >> pure python function in a py file in C#. >> >> And a new problem is that the PythonEngine.ImportModule("modulename") method >> always return NULL in my case. The modulename.py comsumes a third part >> ctypes wrapped library (the Rtree 0.7 python library). It seems the >> PythonEngine can not find it, but actually it has been installed to the >> default path (C:\Python262\Lib\site-packages\rtree) , and the modulename.py >> file runs smoothly under python command line. >> I worte a new py file which only contains a function returning the sys.path, >> and load it in C#, the sys.path seems OK. >> So I don't know what's wrong.... >> >> Thanks. >> >> Zhiyu Li >> >> >> >> >> 2013-03-29 >> lizy10b >> 发件人: Bradley Friedman >> 发送时间: 2013-03-28 22:15:18 >> 收件人: lizy10b >> 抄送: pythondotnet >> 主题: Re: [Python.NET] how to load and execute py file which consumes a thrid >> part C-based python extension in C# code >> What you are looking to do is "embed" a python interpreter in your .net >> project, using pythonnet, and then tell the runtime to execute your python >> script. >> >> I have done this in one of my projects. It does work. >> >> http://pythonnet.sourceforge.net/readme.html#embedding >> >> Sent from my iPad >> >> On Mar 28, 2013, at 8:31 AM, "lizy10b" <lizy...@126.com> wrote: >> >>> Hi there, >>> I am a freshman and new to python.net. >>> I have a *.py script which calls a third part python library, and the >>> library is a ctypes python wrapper of a C++ dll (or say C-based python >>> extension?). >>> Frist I tried to make it using IronPython. IronPython works well when I >>> load a pure python *.py (no third part libraries) file and execute it in C# >>> code. >>> But it failed when I load a *.py which comsumes a thrid part ctypes python >>> wrapper library mentioned above. >>> >>> Then I turn to python.net. But I don't know how to load and execute *.py in >>> C# code using python.net. >>> >>> Thanks. >>> >>> Zhiyu Li >>> Student >>> China >>> >>> 2013-03-28 >>> lizy10b >>> _________________________________________________ >>> 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
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet