如何从指向字符串的PyObject获取char *

时间:2012-03-27 19:10:07

标签: python python-3.x python-c-api

如何从指向字符串的 PyObject 中获取 char * 。例如,这是python脚本,

Test.Connect("272.22.20.65", 1234)

这是C ++代码,

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);

我想将该IP地址作为char *(GetAsString是一个虚函数:D)。请注意我使用的是Python 3.1。

P.S。 我不认为this问题得到了正确答案,  因为Python 3中没有 PyStringObject PyString_AsString 。不是吗?

2 个答案:

答案 0 :(得分:6)

首先是encode it,然后是retrieve it。不要忘记减刑。

答案 1 :(得分:0)

这是我的便携配方,它使用默认编码,适用。它假定您以PyObject*开头,名为o。如果你仍然有函数调用的输入元组,你可以跳过前两行。

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:我还没有测试过它,但它也适用于旧版本的Python。它没有任何特定版本。