问题
How can I get a char* from a PyObject which points to a string. For example, this is the python script,
Test.Connect("272.22.20.65", 1234)
and this is the C++ code,
static PyObject* Connect(PyObject *self, PyObject *args)
{
PyObject* pIP;
PyObject* pPort;
if (!PyArg_UnpackTuple(args, "Connect", 2, 2, &pIP, &pPort))
{
return NULL;
}
const char* zIP = GetAsString(pIP);
long iPort = PyLong_AsLong(pPort);
I want to get that IP address as a char* (GetAsString is a dummy function :D ). Please note that I'm using Python 3.1.
P.S. I don't think this question got the correct answer , since there is no PyStringObject or PyString_AsString in Python 3. Isn't it ?
回答1:
First you encode it, then you retrieve it. Don't forget to decref the temporary.
回答2:
Here is my portable recipe for it, which makes use the default encoding, where that is applicable. It assumes you start with a PyObject*
, named o
. If you still have your input tuple from the function call, you can skip the first 2 lines.
PyObject* args = Py_BuildValue("(O)", o);
/* Py_DECREF(o); if o is not borrowed */
if (!args) return 0;
const char* s = 0;
if (!PyArg_ParseTuple(args, "s", &s)) {
Py_DECREF(args);
return 0;
}
/* s now points to a const char* - use it, delete args when done */
Py_DECREF(args);
PS: I have not tested it, but it should work with older versions of Python as well. There is nothing on it which is version specific.
来源:https://stackoverflow.com/questions/9896032/how-to-get-a-char-from-a-pyobject-which-points-to-a-string