为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2023-06-20 15:17:58
我的 python 代码有返回字符串的方法。import urllib.requestimport sslimport suds.transport.httpfrom suds.client import Clientclass 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 handlersurl="https://atictest.com/datamanagement.asmx?WSDL"client = Client(url, transport=UnverifiedHttpsTransport())def ReadDataTest():  result = client.service.ReadTestData()  return resultdef ReadGridData():  result = client.service.ReadGridData()    return resultdef 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++?
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信