Ich versuche, Python-Skript in einer C++ - Anwendung einzubetten. Um die Integration zu testen, habe ich einen Pilotcode:Python in C++ einbetten, Segmentierungsfehler
// c++ code
int main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue;
if (argc < 3)
{
printf("Usage: exe_name python_source function_name\n");
return 1;
}
// Initialize the Python Interpreter
Py_Initialize();
// Build the name object
pName = PyBytes_FromString(argv[1]);
//std::to_string(argv[1]).encode(
// Load the module object
pModule = PyImport_Import(pName);
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, argv[2]);
if (PyCallable_Check(pFunc))
{
PyObject_CallObject(pFunc, NULL);
}
else
{
PyErr_Print();
}
// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);
// Finish the Python Interpreter
Py_Finalize();
return 0;
}
# Python script
def multiply():
c = 12345*6789
print ('The result of 12345 x 6789 :' + str(c))
ich über die Pfosten kam, den Auftrieb verwenden vorschlagen. Ist Boost einfacher als das? Def von einfach: weniger Code, direkt, weitgehend von der Gemeinschaft verwendet.
Ich interessiere mich für diese Fragen, weil der wirkliche Code, den wir integrieren werden, ziemlich komplex ist (weil er nicht der Kodierungsethik folgt), und er muss oft mit Python-Code kommunizieren, daher gibt es auch Synchronisationsprobleme .
Wo passiert der Absturz? Wie rufen Sie Ihr Programm auf (d. H. Welche Argumente übergeben Sie ihm)? Haben Sie Null-Pointer-Checks irgendwo in Ihrem tatsächlichen Code? –
Code stürzt bei 'pFunc = PyDict_GetItemString (pDict, argv [2]) ab; Ja, Zeiger werden auf Nichtigkeit geprüft, alle bis pDict sind nicht null. Ich nenne es so: './test_cpp.o test_python multiplizieren 'test_python ist der Name des Python-Skripts – Adorn
Liegt der Aufruf-Stack des Absturzes direkt an dieser Zeile oder irgendwo im Python? Was sind die Besonderheiten des Absturzes? – nate