Я пытаюсь расширить Python 3 с помощью C++ в MSVC++ 2010. Я совершенно новичок в этом, и я еще не очень разбираюсь в C++. Исходя из питона документации и помощи я получил здесь раньше, я написал следующий код, который компилируется и работает успешно:Вызов расширений C++ в Python
#include <Python.h>
#include <iostream>
using namespace std;
static PyObject *SpamError;
static PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return PyLong_FromLong(sts);
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
{NULL, NULL, 0, NULL} /* Sentinel */
};
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam", /* name of module */
NULL, /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
SpamMethods
};
PyMODINIT_FUNC
PyInit_spam(void)
{
PyObject *m;
m = PyModule_Create(&spammodule);
if (m == NULL)
return NULL;
SpamError = PyErr_NewException("spam.error", NULL, NULL);
Py_INCREF(SpamError);
PyModule_AddObject(m, "error", SpamError);
return m;
}
int main(int argc, wchar_t *argv[])
{
// Add a builtin module, before Py_Initialize
PyImport_AppendInittab("spam", PyInit_spam);
// Pass argv[0] to the Python Interpreter
Py_SetProgramName(argv[0]);
// Initialise the Python interpreter
Py_Initialize();
// Import module
PyImport_ImportModule("spam");
cout << "test" << endl;
system("PAUSE");
}
Я все еще не уверен о нескольких вещах, хотя; мне нужно создать заголовочный файл для этого и как мне это сделать?
Кроме того, как я в конечном итоге должен был сделать это так, чтобы я вызывал расширение через оболочку python или внутри программы?
Я больше не мог бы согласиться. Быстрее узнать, что C Python API в любом случае, и это откроет новый мир возможностей. – ixe013
Спасибо, но я попытался загрузить Boost раньше и снова попробовать, и загрузка по какой-то причине прерывается. Это редко происходит с другим содержимым, которое я загружаю. Я не думаю, что кто-то знает причину этого? – Tagc
Я думаю, что он наконец загружен успешно. Спасибо, спасибо. :) – Tagc