Как получить символ * из PyObject, который указывает на строку - PullRequest
3 голосов
/ 27 марта 2012

Как я могу получить char * от PyObject , который указывает на строку.Например, это скрипт 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-адрес в виде символа * (GetAsString - фиктивныйфункция: D).Обратите внимание, что я использую Python 3.1.

PS Я не думаю, что этот вопрос получил правильный ответ, поскольку в Python 3 нет PyStringObject или PyString_AsString .не так ли?

Ответы [ 2 ]

6 голосов
/ 27 марта 2012

Сначала вы кодируете его , затем вы извлекаете его . Не забудьте определить временное.

0 голосов
/ 31 марта 2014

Вот мой портативный рецепт для этого, который использует кодировку по умолчанию, где это применимо.Предполагается, что вы начинаете с PyObject* с именем o.Если у вас все еще есть входной кортеж из вызова функции, вы можете пропустить первые 2 строки.

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.На нем нет ничего конкретного версии.

...