Commit 869bad9b authored by Martin v. Löwis's avatar Martin v. Löwis

Issue #3717: Fix Demo/embed/demo.c.

Reviewed by Benjamin Peterson.
parent c820eaf3
...@@ -2,34 +2,38 @@ ...@@ -2,34 +2,38 @@
#include "Python.h" #include "Python.h"
void initxyzzy(void); /* Forward */ PyObject* PyInit_xyzzy(void); /* Forward */
main(int argc, char **argv) main(int argc, char **argv)
{ {
/* Ignore passed-in argc/argv. If desired, conversion
should use mbstowcs to convert them. */
wchar_t *args[] = {L"embed", L"hello", 0};
/* Pass argv[0] to the Python interpreter */ /* Pass argv[0] to the Python interpreter */
Py_SetProgramName(argv[0]); Py_SetProgramName(args[0]);
/* Add a static module */
PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
/* Initialize the Python interpreter. Required. */ /* Initialize the Python interpreter. Required. */
Py_Initialize(); Py_Initialize();
/* Add a static module */
initxyzzy();
/* Define sys.argv. It is up to the application if you /* Define sys.argv. It is up to the application if you
want this; you can also let it undefined (since the Python want this; you can also let it undefined (since the Python
code is generally not a main program it has no business code is generally not a main program it has no business
touching sys.argv...) */ touching sys.argv...) */
PySys_SetArgv(argc, argv); PySys_SetArgv(2, args);
/* Do some application specific code */ /* Do some application specific code */
printf("Hello, brave new world\n\n"); printf("Hello, brave new world\n\n");
/* Execute some Python statements (in module __main__) */ /* Execute some Python statements (in module __main__) */
PyRun_SimpleString("import sys\n"); PyRun_SimpleString("import sys\n");
PyRun_SimpleString("print sys.builtin_module_names\n"); PyRun_SimpleString("print(sys.builtin_module_names)\n");
PyRun_SimpleString("print sys.modules.keys()\n"); PyRun_SimpleString("print(sys.modules.keys())\n");
PyRun_SimpleString("print sys.executable\n"); PyRun_SimpleString("print(sys.executable)\n");
PyRun_SimpleString("print sys.argv\n"); PyRun_SimpleString("print(sys.argv)\n");
/* Note that you can call any public function of the Python /* Note that you can call any public function of the Python
interpreter here, e.g. call_object(). */ interpreter here, e.g. call_object(). */
...@@ -57,9 +61,20 @@ static PyMethodDef xyzzy_methods[] = { ...@@ -57,9 +61,20 @@ static PyMethodDef xyzzy_methods[] = {
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
void static struct PyModuleDef xyzzymodule = {
initxyzzy(void) {}, /* m_base */
"xyzzy", /* m_name */
0, /* m_doc */
0, /* m_size */
xyzzy_methods, /* m_methods */
0, /* m_reload */
0, /* m_traverse */
0, /* m_clear */
0, /* m_free */
};
PyObject*
PyInit_xyzzy(void)
{ {
PyImport_AddModule("xyzzy"); return PyModule_Create(&xyzzymodule);
Py_InitModule("xyzzy", xyzzy_methods);
} }
...@@ -74,6 +74,8 @@ Build ...@@ -74,6 +74,8 @@ Build
Tools/Demos Tools/Demos
----------- -----------
- Issue #3717: Fix Demo/embed/demo.c.
- Issue #4072: Add a distutils demo for build_py_2to3. - Issue #4072: Add a distutils demo for build_py_2to3.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment