Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python嵌入C++;_Python_C++_Python C Api - Fatal编程技术网

将python嵌入C++;

将python嵌入C++;,python,c++,python-c-api,Python,C++,Python C Api,我对我的实现有点困惑。我有一个Python脚本嵌入到C++中。 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(Unverifie

我对我的实现有点困惑。我有一个Python脚本嵌入到C++中。
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://xxxxxest.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()
然后
sample\u main.cpp
has
plugin lib
sample\u plugin.cpp

示例_plugin.cpp包含python嵌入代码,如下所示

  Py_Initialize();
  pName = PyUnicode_DecodeFSDefault("web_interface");
  pModule = PyImport_Import(pName);
  Py_DECREF(pName);
  if (pModule != NULL) {
    pFunc_readtest = PyObject_GetAttrString(pModule, "ReadDataTest");
    if (pFunc_readtest && PyCallable_Check(pFunc_readtest)) {
      pValue = PyObject_CallObject(pFunc_readtest, NULL);
      if(pValue != NULL) {
         printf("Result of call: %s\n", pValue);
         Py_DECREF(pValue);
      }
    }
    Py_XDECREF(pFunc_readtest);
    Py_DECREF(pModule);
  }else{
    PyErr_Print();
    printf("Can't call python \n");
  }
  Py_FinalizeEx();
当我运行sample_main.exe时,出现如下错误:

Traceback (most recent call last):
  File "/opt/nvidia/deepstream/deepstream-5.0/sources/apps/sample_apps/deepstream-test3/web_interface.py", line 2, in <module>
    import ssl
  File "/usr/lib/python3.6/ssl.py", line 101, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: /usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-aarch64-linux-gnu.so: undefined symbol: PyExc_OSError
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ImportError: /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-aarch64-linux-gnu.so: undefined symbol: PyExc_ValueError

Original exception was:
Traceback (most recent call last):
  File "/opt/nvidia/deepstream/deepstream-5.0/sources/apps/sample_apps/deepstream-test3/web_interface.py", line 2, in <module>
    import ssl
  File "/usr/lib/python3.6/ssl.py", line 101, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: /usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-aarch64-linux-gnu.so: undefined symbol: PyExc_OSError
内存泄漏或任何其他问题

在嵌入Python的应用程序中,必须在使用任何其他Python/C API函数之前调用Py_Initialize()函数


文档的第一句话是“是”,我在上面显示的sample_plugin.cpp中称之为“是”。现在的问题是,我仍然需要在
sample\u maincpp
中再次调用,这意味着,对于像我这样的实现,Py\u Initialize();和Py_FinalizeEx();是的:如果你不打电话,其他人也不会打。你没有回答我的问题。为什么仅仅调用插件库还不够?为什么需要在main中而不是在lib中调用呢?在运行时,库代码的行为与“您的”代码并没有什么不同,所以它应该可以正常工作。但是,在此之前不能对Python进行其他调用。这就是为什么看到a会很好。有人能解释一下为什么需要包含
Py\u Initialize()
-这就是文档的目的吗
sample_main.cpp