source: python/vendor/Python-2.6.5/Demo/embed/demo.c

Last change on this file was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1/* Example of embedding Python in another program */
2
3#include "Python.h"
4
5void initxyzzy(void); /* Forward */
6
7main(int argc, char **argv)
8{
9 /* Pass argv[0] to the Python interpreter */
10 Py_SetProgramName(argv[0]);
11
12 /* Initialize the Python interpreter. Required. */
13 Py_Initialize();
14
15 /* Add a static module */
16 initxyzzy();
17
18 /* Define sys.argv. It is up to the application if you
19 want this; you can also let it undefined (since the Python
20 code is generally not a main program it has no business
21 touching sys.argv...) */
22 PySys_SetArgv(argc, argv);
23
24 /* Do some application specific code */
25 printf("Hello, brave new world\n\n");
26
27 /* Execute some Python statements (in module __main__) */
28 PyRun_SimpleString("import sys\n");
29 PyRun_SimpleString("print sys.builtin_module_names\n");
30 PyRun_SimpleString("print sys.modules.keys()\n");
31 PyRun_SimpleString("print sys.executable\n");
32 PyRun_SimpleString("print sys.argv\n");
33
34 /* Note that you can call any public function of the Python
35 interpreter here, e.g. call_object(). */
36
37 /* Some more application specific code */
38 printf("\nGoodbye, cruel world\n");
39
40 /* Exit, cleaning up the interpreter */
41 Py_Exit(0);
42 /*NOTREACHED*/
43}
44
45/* A static module */
46
47/* 'self' is not used */
48static PyObject *
49xyzzy_foo(PyObject *self, PyObject* args)
50{
51 return PyInt_FromLong(42L);
52}
53
54static PyMethodDef xyzzy_methods[] = {
55 {"foo", xyzzy_foo, METH_NOARGS,
56 "Return the meaning of everything."},
57 {NULL, NULL} /* sentinel */
58};
59
60void
61initxyzzy(void)
62{
63 PyImport_AddModule("xyzzy");
64 Py_InitModule("xyzzy", xyzzy_methods);
65}
Note: See TracBrowser for help on using the repository browser.