将字符串从 python 返回到 C++

我的 python 代码有返回字符串的方法。


import urllib.request

import ssl

import suds.transport.http

from suds.client import Client


class UnverifiedHttpsTransport(suds.transport.http.HttpTransport):

  def __init__(self, *args, **kwargs):

     super(UnverifiedHttpsTransport, self).__init__(*args, **kwargs)

  def u2handlers(self):

     handlers = super(UnverifiedHttpsTransport, self).u2handlers()

     context = ssl.create_default_context()

     context.check_hostname = False

     context.verify_mode = ssl.CERT_NONE

     handlers.append(urllib.request.HTTPSHandler(context=context))

     return handlers


url="https://atictest.com/datamanagement.asmx?WSDL"

client = Client(url, transport=UnverifiedHttpsTransport())


def ReadDataTest():

  result = client.service.ReadTestData()

  return result


def ReadGridData():

  result = client.service.ReadGridData()  

  return result


def main():

  result=ReadGridData()

  print(result)


if __name__ == "__main__":

  main() 

如果调用 ReadDataTest() 方法,结果有 string {"Message":"You Have Successfully Connected"}。


由于此 python 方法是从 C++ 调用的,因此我需要在 C++ 中解析 String 返回值。


我试过


pFunc_readtest = PyObject_GetAttrString(pModule, "ReadDataTest");

if (pFunc_readtest && PyCallable_Check(pFunc_readtest)) {

  pValue = PyObject_CallObject(pFunc_readtest, NULL);

  if(pValue != NULL) {

     std::string m_gettextFunction = PyObject_GetAttrString(pValue, "gettext");

     printf("Result of call: %c\n", m_gettextFunction);

     Py_DECREF(pValue);

  }

}

但是我在编译时出错。如何从python接收字符串到C++?


宝慕林4294392
浏览 147回答 1
1回答

智慧大石

返回PyObject_GetAttrStringa PyObject *,正确处理它,这是代码:pFunc_readtest = PyObject_GetAttrString(pModule, "ReadDataTest");if (pFunc_readtest && PyCallable_Check(pFunc_readtest)) {    pValue = PyObject_CallObject(pFunc_readtest, NULL);    if(pValue != NULL) {        PyObject * res = PyObject_GetAttrString(pValue, "gettext");        if (!PyUnicode_Check(res)) {            // not a string, return error here        }        std::string m_gettextFunction = std::string(PyUnicode_AsUTF8(res));        printf("Result of call: %c\n", m_gettextFunction);        Py_DECREF(pValue);    }}如果gettext是一个方法然后调用它,不要只是获取它:PyObject * res = PyObject_CallMethod(pValue, "gettext", NULL);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python