乐闻世界logo
搜索文章和话题

How can a module written in Python be accessed from C?

1个答案

1

Accessing Python modules from C is a highly useful feature, especially when you want to leverage Python's rich libraries and APIs without completely sacrificing C's performance advantages. The common approach to achieve this is through Python's C API.

Here are the steps to access Python modules from C:

1. Include Python Header Files

First, include Python's header files in your C program to use Python's functions.

c
#include <Python.h>

2. Initialize the Python Interpreter

In your C program, initialize the Python interpreter.

c
Py_Initialize();

3. Run Python Code

Several methods exist for calling Python code from C:

a. Execute Python Code Directly

You can directly execute a Python code string:

c
PyRun_SimpleString("print('Hello from Python!')");

b. Import a Python Module and Use Its Functions

To use a specific Python module and its functions, follow this approach:

c
PyObject *pName, *pModule, *pFunc; PyObject *pArgs, *pValue; pName = PyUnicode_DecodeFSDefault("mymodule"); // Python module name pModule = PyImport_Import(pName); Py_DECREF(pName); if (pModule != NULL) { pFunc = PyObject_GetAttrString(pModule, "myfunction"); // Python function name if (pFunc && PyCallable_Check(pFunc)) { pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("argument"); // Argument passed to the Python function pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) { printf("Result of call: %ld\n", PyLong_AsLong(pValue)); Py_DECREF(pValue); } else { Py_DECREF(pFunc); Py_DECREF(pModule); PyErr_Print(); fprintf(stderr, "Call failed\n"); return 1; } } else { if (PyErr_Occurred()) PyErr_Print(); fprintf(stderr, "Cannot find function \"%s\"\n", "myfunction"); } Py_XDECREF(pFunc); Py_DECREF(pModule); } else { PyErr_Print(); fprintf(stderr, "Failed to load \"%s\"\n", "mymodule"); return 1; }

4. Clean Up and Close the Python Interpreter

After completing the call, clean up and close the Python interpreter:

c
Py_Finalize();

Example Application Scenario

Suppose you have a Python module mymodule that contains a function myfunction for performing complex data analysis. Your C program needs to process real-time data and leverage this Python function to analyze it. Using the above method, you can call myfunction from your C program, obtain the necessary analysis results, and then continue with other processing in your C program.

This approach allows C programs to leverage Python's advanced features while maintaining C's execution efficiency, making it ideal for scenarios where you need to combine the strengths of both languages.

2024年8月9日 09:50 回复

你的答案