mirror of
https://github.com/python/cpython.git
synced 2026-04-15 16:21:24 +00:00
- Pass -v to pip, so compiler output is visible - Move the call ``spam.system(3)`` up so that error handling is tested right after it's added - Use `PyUnicode_AsUTF8AndSize` as `PyUnicode_AsUTF8` is not in the Limited API. - Add a footnote about embedded NULs.
55 lines
1.1 KiB
C
55 lines
1.1 KiB
C
/* This file needs to be kept in sync with the tutorial
|
|
* at Doc/extending/first-extension-module.rst
|
|
*/
|
|
|
|
/// Includes
|
|
|
|
#include <Python.h>
|
|
#include <stdlib.h> // for system()
|
|
|
|
/// Implementation of spam.system
|
|
|
|
static PyObject *
|
|
spam_system(PyObject *self, PyObject *arg)
|
|
{
|
|
const char *command = PyUnicode_AsUTF8AndSize(arg, NULL);
|
|
if (command == NULL) {
|
|
return NULL;
|
|
}
|
|
int status = system(command);
|
|
PyObject *result = PyLong_FromLong(status);
|
|
return result;
|
|
}
|
|
|
|
/// Module method table
|
|
|
|
static PyMethodDef spam_methods[] = {
|
|
{
|
|
.ml_name="system",
|
|
.ml_meth=spam_system,
|
|
.ml_flags=METH_O,
|
|
.ml_doc="Execute a shell command.",
|
|
},
|
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
|
};
|
|
|
|
/// Module slot table
|
|
|
|
static PyModuleDef_Slot spam_slots[] = {
|
|
{Py_mod_name, "spam"},
|
|
{Py_mod_doc, "A wonderful module with an example function"},
|
|
{Py_mod_methods, spam_methods},
|
|
{0, NULL}
|
|
};
|
|
|
|
/// Export hook prototype
|
|
|
|
PyMODEXPORT_FUNC PyModExport_spam(void);
|
|
|
|
/// Module export hook
|
|
|
|
PyMODEXPORT_FUNC
|
|
PyModExport_spam(void)
|
|
{
|
|
return spam_slots;
|
|
}
|