Jump to content

  • Log In with Google      Sign In   
  • Create Account

Calling all IT Pros from Canada and Australia.. we need your help! Support our site by taking a quick sponsored surveyand win a chance at a $50 Amazon gift card. Click here to get started!


Embedding Python, how to get the return value?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 CoffeeMug   Members   -  Reputation: 852

Like
Likes
Like

Posted 24 April 2003 - 02:59 PM

I am writing a small test app that embeds a Python interpreter. In the C++ code I get input from the user, then pass it to the interpreter that executes it. I then check for an error and print it if it occurred, and go back to asking for the user''s input again. Here''s a small example:
  
string input;
while(1)
{
	cin >> input;
	PyRun_SimpleString((char*)input.c_str());
	if(PyErr_Occurred() != NULL)
		PyErr_Print();
}
  
I have a few simple questions. 1. When calling PyErr_Print() is there a way to redirect it to a different output? Perhaps there is a similar function that returns an error in a string? 2. Some more advanced PyRun_* functions return a PyObject* which is a result of the operation. However, since the statement is typed by the user, I have no idea what datatype the returned PyObject wraps. I would like to print the value of the returned object on the screen. Is there something similar to a ToString() function that I could use regardless of what PyObject wraps?

Sponsor:

#2 the Speed Bump   Members   -  Reputation: 240

Like
Likes
Like

Posted 24 April 2003 - 04:17 PM

Redirecting PyErr_Print, as far as I know, can only be done by overriding sys.stderr. Just create a python object that has a write method, and overwrite sys.stderr with it. (sys.stdout too, if you like)

"toString" is implemented as the Python str() function. On the C end, it''s called PyObject_Str. PyObject_Repr is essentially the same, but uses the __repr__ method of the object instead. It''s the same as `blah` in Python.


  
PyObject* theObject;
PyObject* theString = PyObject_Str(theObject);
assert(theString != 0);
char* str = PyString_AsString(theString);
Py_DECREF(theString);

// use str here



(I''m just winging it here, I''ve never needed PyObject_Str() before)

#3 CoffeeMug   Members   -  Reputation: 852

Like
Likes
Like

Posted 24 April 2003 - 09:00 PM

Thanks. Most of it is chinese to me (note, I don''t speak chinese ), but I''ll get there. Thanks again for the starting point.

#4 quorn3000   Members   -  Reputation: 819

Like
Likes
Like

Posted 24 April 2003 - 09:19 PM

you normally print an object in python like:

  
>>>a = 5
>>>print a
5
>>>#or even
>>>a
5


print a calls a.__repr__()

in your own classes, to make them print nicely you can define __repr__ and it will be used by print.


  
>>> class test:
... def __repr__(self):
... return "I am a test"
...
>>> a = test()
>>> print a
I am a test
>>> a
I am a test
>>>





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS