[Python.NET] Could you tell me how to call python from c#?

Karpenstein, Nissim (C-BASS) Nissim.Karpenstein at C-BASS.COM
Thu Jun 7 15:07:52 CEST 2007


Those numbers in your exception message are pointers to Python Strings
in the unmanaged side.  Use this:

      catch (PythonException ex)
      {
        String typ = new PyObject(ex.Type).ToString();
        String val = new PyObject(ex.Value).ToString();
        String trace = new PyObject(ex.Traceback).ToString();
        MessageBox.Show(typ + "\n" + val + "\n" + trace);
      }

I'm not sure of the answer to any of your other questions. 

> -----Original Message-----
> From: Barrett, Joey [mailto:Joey.Barrett at itg.com] 
> Sent: Wednesday, June 06, 2007 9:48 PM
> To: Karpenstein, Nissim (C-BASS); Michael Eddington; 
> pythondotnet at python.org
> Subject: RE: [Python.NET] Could you tell me how to call 
> python from c#?
> 
> Thanks for working through this with me.  Lots of questions, 
> but I promise to write a nice HOW-TO on all this once I get 
> it working from .NET.
> 
> ...
> if (module == null)
> {
> 	throw new PythonException();
> }
> catch (PythonException e)
> {
> 	result += e.Message + "\n" + e.StackTrace + "\n" + e.Type + "\n"
> + 		e.Value + e.Traceback;
> }
> 
> result.toString() yields:
> 
> Exception of type 'Python.Runtime.PythonException' was thrown. at
> PythonTester.PythonTest2() in C:\Documents and 
> Settings\user\workspace\PythonTester.cs:line 180 75319696
> 7542755275491888
> 
> 1.  How do I get the error from the interpreter?  (NOTE: I am 
> not "finalizing/shutting-down" the interpreter so the errors should be
> available)
> 
> 
> From a thread titled "[Python.NET] embedding in aspx problem"
> (http://mail.python.org/pipermail/pythondotnet/2004-May/000154.html),
> the user fixed the problem by adding a fully qualified path 
> to the sys.path.
> 
> My sys.path:
> 
> 'C:\\Documents and
> Settings\\jbarrett\\Desktop\\Kryptonite\\Kryptonite\\bin\\pyth
> on23.zip',
> '.\\DLLs', '.\\lib', '.\\lib\\plat-win', '.\\lib\\lib-tk', 
> 'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727'
> 
> 2.  What is python23.zip?  I don't see it anywhere.
> 
> 3.  Are the relative paths (ie. '.\\DLLs', '.\\lib', ...) 
> supposed to live off the root of the interpreter?
> 
> 4.  What is 
> 'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727' on the path for?
> 
> Thanks again for any help you can offer.
> 
> Joey J. Barrett
> Investment Technology Group, Inc.
> 
>  
> 
> -----Original Message-----
> From: Karpenstein, Nissim (C-BASS)
> [mailto:Nissim.Karpenstein at C-BASS.COM]
> Sent: Wednesday, June 06, 2007 12:10 PM
> To: Barrett, Joey; Michael Eddington; pythondotnet at python.org
> Subject: RE: [Python.NET] Could you tell me how to call 
> python from c#?
> 
> You can get the error message from ImportModule like this:
> 
> // After ImportModule
> if (module == null)
>   throw new PythonException()
> 
> That will check the error codes from the Python Interpreter 
> and populate fields in the Exception.
> The python interpreter being executed is the .dll version 
> probably in your windows\system32 directory.
> 
> I would try first to get the environemtn working the same 
> outside of vs.net.  Add c:\test to your pythonpath and make 
> sure you can call the method from the python prompt in a 
> shell window.  Then, if that's working, restart your vs and 
> it should work.  I'm not sure how to modify the pythonpath on 
> the fly or if that's really the problem.
> 
> 
> 
> > -----Original Message-----
> > From: Barrett, Joey [mailto:Joey.Barrett at itg.com]
> > Sent: Wednesday, June 06, 2007 3:02 PM
> > To: Michael Eddington; Karpenstein, Nissim (C-BASS); 
> > pythondotnet at python.org
> > Subject: RE: [Python.NET] Could you tell me how to call python from 
> > c#?
> > 
> > Thank you for all the help.
> > 
> > Loading a module located at C:\test\testModule.py is causing the 
> > following error: "Object reference not set to an instance of an 
> > object."
> > 
> > TestModule.py
> > 
> > def testMethod(self, options = {}):
> > 	m = {}
> > 	return m
> > 
> > 
> > The last line of this code throws the error:
> > 
> > // setting up PYTHONPATH
> > System.Environment.SetEnvironmentVariable("PYTHONPATH",@"C:\test;");
> > PythonEngine.Initialize();
> > PyObject module = PythonEngine.ImportModule("testModule");
> > PyObject returnObject = module.InvokeMethod("testMethod", new 
> > PyTuple());
> > 
> > 
> > 
> > Is this the correct way to import a module or can a fully specified 
> > path be used?  For example:
> > 
> > PythonEngine.ImportModule("C:\test\testModule.py");
> > 
> > 
> > PythonEngine.Initialize() initializes the interpreter --- what 
> > interpreter is initialized?  If Python is on the PATH, is that the 
> > interpreter initialized?
> > 
> > 
> > Thanks, I really appreciate any tips.
> > 
> > Joey J. Barrett
> > Investment Technology Group, Inc.
> > 
> >  
> > 
> > -----Original Message-----
> > From: pythondotnet-bounces at python.org
> > [mailto:pythondotnet-bounces at python.org] On Behalf Of Michael 
> > Eddington
> > Sent: Wednesday, June 06, 2007 11:09 AM
> > To: pythondotnet at python.org
> > Subject: Re: [Python.NET] Could you tell me how to call python from 
> > c#?
> > 
> > Yes, you can set the PYTHONHOME variable from .net prior to calling 
> > the initialize.  Many of the python runtimes set registry 
> keys or are 
> > located in default locations.
> > 
> > mike
> > 
> > On 6/6/07, Barrett, Joey <Joey.Barrett at itg.com> wrote:
> > >
> > > Thank you for your response, this is helpful.
> > >
> > > The methods called usually return lists or dictionaries and
> > sometimes
> > > other types too that need to be used within the C#.  In 
> the example
> > you
> > > provided the return value from InvokeMethod(), is a string
> > "fromPython",
> > > but I noticed InvokeMethod() actually returns a PyObject.
> > >
> > > How can I look at that PyObject and extract the returned values?
> > >
> > > The classes I use import many modules from a number of 
> locations on
> > disk
> > > that aren't known to the interpreter.
> > >
> > > Is there a way to add to the PYTHONPATH programmatically 
> in C# using
> > the
> > > Python for .net library, or would it be required to write 
> a wrapper 
> > > python module that adds to the path first?  Maybe there is
> > another way
> > > to handle this?
> > >
> > > Thank you again
> > >
> > > Joey J. Barrett
> > > Investment Technology Group, Inc.
> > >
> > > -----Original Message-----
> > > From: Karpenstein, Nissim (C-BASS)
> > > [mailto:Nissim.Karpenstein at C-BASS.COM]
> > > Sent: Wednesday, June 06, 2007 6:37 AM
> > > To: Barrett, Joey; pythondotnet at python.org
> > > Subject: RE: [Python.NET] Could you tell me how to call 
> python from
> > c#?
> > >
> > > I tried to post this to the list yesterday but it bounced
> > because of
> > > address issues...hopefully this will work:
> > >
> > > If you want to execute a python program from c-sharp you
> > can just use
> > > System.Diagnostics.Process to execute python.exe and you 
> don't need 
> > > python for .net.
> > >
> > > Python for .net is more appropriate for if you want to execute a
> > python
> > > function or create an instance of a python object and then
> > run methods
> > > and access attributes from your C# program.
> > >
> > > The example you linked to is OK, except that he modified the 
> > > Python.Runtime.Dll which is not necessary.
> > >
> > > If you had a Hello.py with a function called hello Like this:
> > >
> > > def hello():
> > >     return 'hello'
> > >
> > >
> > > You could do this in C#:
> > >
> > > PythonEngine.Initialize();
> > > PyObject helloModule = PythonEngine.ImportModule("Hello");
> > > String fromPython = helloModule.InvokeMethod("hello", new 
> > > PyTuple()).ToString(); PythonEngine.Shutdown();
> > >
> > > // now fromPython = "hello"
> > >
> > > If your function takes an argument:
> > >
> > > def returnArg(arg):
> > >     return arg
> > >
> > > PythonEngine.Initialize();
> > > PyObject helloModule = PythonEngine.ImportModule("Hello");
> > > String fromPython = helloModule.InvokeMethod("returnArg", new 
> > > PyObject[1] {new PyString("Test")}).ToString();
> > PythonEngine.Shutdown();
> > >
> > > // now fromPython = "test"
> > >
> > > ________________________________
> > >
> > >         From: pythondotnet-bounces at python.org 
> > > [mailto:pythondotnet-bounces at python.org] On Behalf Of 
> Barrett, Joey
> > >         Sent: Tuesday, June 05, 2007 8:11 PM
> > >         To: pythondotnet at python.org
> > >         Subject: Re: [Python.NET] Could you tell me how to
> > call python
> > > from c#?
> > >
> > >
> > >
> > >         Hi,
> > >
> > >
> > >
> > >         I also would be very interested in seeing some examples to
> > "call
> > > python from c#" using "Python for .NET".  I have dug around
> > Google and
> > a
> > > number of forums---I can't find anything except the post 
> from below.
> > I
> > > really hope I'm not missing the obvious somewhere.
> > >
> > >
> > >
> > >         IronPython is great but my needs require using a few c++ 
> > > extensions compiled for CPython (that can't be recompiled).
> > >
> > >
> > >
> > >         Also thanks in advance,
> > >
> > >
> > >
> > >         Joey J. Barrett
> > >
> > >         Investment Technology Group, Inc.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >         Hello, PythonNet!
> > >
> > >
> > >         I'm looking for some sample code to call python from C#.
> > >         Actually, I'd like to execute python program(let say
> > 'Hello.py')
> > > from C#
> > >         with parameters.
> > >         Actually, I'm a newbie at both of languages. So, could you
> > give
> > > sample
> > >         source code? I was looking for some guide or source for
> > several
> > > days,
> > >         but I couldn't find it. What I've got so far from
> > googling is
> > >
> > >
> > http://mail.python.org/pipermail/pythondotnet/2003-November/00
> > 0037.html,
> > >
> > >         but I can't understand it and old one.
> > >
> > >         Thank you in advance.
> > >         Seungweon.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+
> > > -+-
> > >         This message is for the named person's use only. This 
> > > communication is for
> > >         informational purposes only and has been obtained
> > from sources
> > > believed to
> > >         be reliable, but it is not necessarily complete and its
> > accuracy
> > > cannot be
> > >         guaranteed. It is not intended as an offer or
> > solicitation for
> > > the purchase
> > >         or sale of any financial instrument or as an official 
> > > confirmation of any
> > >         transaction. Moreover, this material should not 
> be construed
> > to
> > > contain any
> > >         recommendation regarding, or opinion concerning,
> > any security.
> > > It may
> > >         contain confidential, proprietary or legally privileged 
> > > information. No
> > >         confidentiality or privilege is waived or lost by any 
> > > mistransmission. If
> > >         you receive this message in error, please 
> immediately delete
> > it
> > > and all
> > >         copies of it from your system, destroy any hard 
> copies of it
> > and
> > > notify the
> > >         sender. You must not, directly or indirectly, use,
> > disclose,
> > > distribute,
> > >         print, or copy any part of this message if you 
> are not the 
> > > intended
> > >         recipient.  Any views expressed in this message 
> are those of
> > the
> > > individual
> > >         sender, except where the message states otherwise and the
> > sender
> > > is
> > >         authorized to state them to be the views of any 
> such entity.
> > >
> > >         Securities products and services provided to Canadian
> > investors
> > > are offered
> > >         by ITG Canada Corp. (member CIPF and IDA), an 
> affiliate of 
> > > Investment
> > >         Technology Group, Inc.
> > >
> > >         ITG Inc. and/or its affiliates reserves the right 
> to monitor
> > and
> > > archive
> > >         all electronic communications through its network.
> > >
> > >         ITG Inc. Member NASD, SIPC
> > >
> > >
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+
> > > -+-
> > >
> > >
> > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> > >
> > > This e-mail (including any attachments) may contain
> > information that
> > > is private, confidential, or protected by attorney-client 
> or other 
> > > privilege.  If you received this e-mail in error, please 
> delete it 
> > > from your system without copying it and notify sender by
> > reply e-mail,
> > > so that our records can be corrected.
> > >
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+
> > -+-
> > > This message is for the named person's use only. This
> > communication is
> > for
> > > informational purposes only and has been obtained from sources
> > believed to
> > > be reliable, but it is not necessarily complete and its accuracy
> > cannot be
> > > guaranteed. It is not intended as an offer or solicitation for the
> > purchase
> > > or sale of any financial instrument or as an official
> > confirmation of
> > any
> > > transaction. Moreover, this material should not be construed to
> > contain any
> > > recommendation regarding, or opinion concerning, any
> > security. It may
> > > contain confidential, proprietary or legally privileged 
> information.
> > No
> > > confidentiality or privilege is waived or lost by any
> > mistransmission.
> > If
> > > you receive this message in error, please immediately 
> delete it and
> > all
> > > copies of it from your system, destroy any hard copies of it and
> > notify the
> > > sender. You must not, directly or indirectly, use, disclose,
> > distribute,
> > > print, or copy any part of this message if you are not 
> the intended 
> > > recipient.  Any views expressed in this message are those of the
> > individual
> > > sender, except where the message states otherwise and the 
> sender is 
> > > authorized to state them to be the views of any such entity.
> > >
> > > Securities products and services provided to Canadian 
> investors are
> > offered
> > > by ITG Canada Corp. (member CIPF and IDA), an affiliate of
> > Investment
> > > Technology Group, Inc.
> > >
> > > ITG Inc. and/or its affiliates reserves the right to monitor and
> > archive
> > > all electronic communications through its network.
> > >
> > > ITG Inc. Member NASD, SIPC
> > >
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+
> > -+-
> > > _________________________________________________
> > > Python.NET mailing list - PythonDotNet at python.org 
> > > http://mail.python.org/mailman/listinfo/pythondotnet
> > >
> > _________________________________________________
> > Python.NET mailing list - PythonDotNet at python.org 
> > http://mail.python.org/mailman/listinfo/pythondotnet
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+-+-
> > This message is for the named person's use only. This 
> communication is 
> > for informational purposes only and has been obtained from sources 
> > believed to be reliable, but it is not necessarily complete and its 
> > accuracy cannot be guaranteed.
> > It is not intended as an offer or solicitation for the purchase or 
> > sale of any financial instrument or as an official 
> confirmation of any 
> > transaction. Moreover, this material should not be construed to 
> > contain any recommendation regarding, or opinion concerning, any 
> > security. It may contain confidential, proprietary or legally 
> > privileged information. No confidentiality or privilege is 
> waived or 
> > lost by any mistransmission. If you receive this message in error, 
> > please immediately delete it and all copies of it from your system, 
> > destroy any hard copies of it and notify the sender. You must not, 
> > directly or indirectly, use, disclose, distribute, print, 
> or copy any 
> > part of this message if you are not the intended recipient. 
>  Any views 
> > expressed in this message are those of the individual 
> sender, except 
> > where the message states otherwise and the sender is authorized to 
> > state them to be the views of any such entity.
> > 
> > Securities products and services provided to Canadian investors are 
> > offered by ITG Canada Corp. (member CIPF and IDA), an affiliate of 
> > Investment Technology Group, Inc.
> > 
> > ITG Inc. and/or its affiliates reserves the right to monitor and 
> > archive all electronic communications through its network.
> > 
> > ITG Inc. Member NASD, SIPC
> > -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> > -+-+-+-+-+-+-
> > 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> 
> This e-mail (including any attachments) may contain 
> information that is private, confidential, or protected by 
> attorney-client or other privilege.  If you received this 
> e-mail in error, please delete it from your system without 
> copying it and notify sender by reply e-mail, so that our 
> records can be corrected.
> -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> -+-+-+-+-+-+-
> This message is for the named person's use only. This 
> communication is for informational purposes only and has been 
> obtained from sources believed to be reliable, but it is not 
> necessarily complete and its accuracy cannot be guaranteed. 
> It is not intended as an offer or solicitation for the 
> purchase or sale of any financial instrument or as an 
> official confirmation of any transaction. Moreover, this 
> material should not be construed to contain any 
> recommendation regarding, or opinion concerning, any 
> security. It may contain confidential, proprietary or legally 
> privileged information. No confidentiality or privilege is 
> waived or lost by any mistransmission. If you receive this 
> message in error, please immediately delete it and all copies 
> of it from your system, destroy any hard copies of it and 
> notify the sender. You must not, directly or indirectly, use, 
> disclose, distribute, print, or copy any part of this message 
> if you are not the intended recipient.  Any views expressed 
> in this message are those of the individual sender, except 
> where the message states otherwise and the sender is 
> authorized to state them to be the views of any such entity.
> 
> Securities products and services provided to Canadian 
> investors are offered by ITG Canada Corp. (member CIPF and 
> IDA), an affiliate of Investment Technology Group, Inc.
> 
> ITG Inc. and/or its affiliates reserves the right to monitor 
> and archive all electronic communications through its network.
> 
> ITG Inc. Member NASD, SIPC
> -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> -+-+-+-+-+-+-
> 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

This e-mail (including any attachments) may contain 
information that is private, confidential, or 
protected by attorney-client or other privilege.  If 
you received this e-mail in error, please delete it 
from your system without copying it and notify sender 
by reply e-mail, so that our records can be corrected.



More information about the PythonDotNet mailing list