Changeset 391 for python/trunk/Demo/embed/demo.c
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Demo/embed/demo.c
r2 r391 7 7 main(int argc, char **argv) 8 8 { 9 10 9 /* Pass argv[0] to the Python interpreter */ 10 Py_SetProgramName(argv[0]); 11 11 12 13 12 /* Initialize the Python interpreter. Required. */ 13 Py_Initialize(); 14 14 15 16 15 /* Add a static module */ 16 initxyzzy(); 17 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); 18 /* Define sys.argv. It is up to the application if you 19 want this; you can also leave it undefined (since the Python 20 code is generally not a main program it has no business 21 touching sys.argv...) 23 22 24 /* Do some application specific code */ 25 printf("Hello, brave new world\n\n"); 23 If the third argument is true, sys.path is modified to include 24 either the directory containing the script named by argv[0], or 25 the current working directory. This can be risky; if you run 26 an application embedding Python in a directory controlled by 27 someone else, attackers could put a Trojan-horse module in the 28 directory (say, a file named os.py) that your application would 29 then import and run. 30 */ 31 PySys_SetArgvEx(argc, argv, 0); 26 32 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 /* Do some application specific code */ 34 printf("Hello, brave new world\n\n"); 33 35 34 /* Note that you can call any public function of the Python 35 interpreter here, e.g. call_object(). */ 36 /* Execute some Python statements (in module __main__) */ 37 PyRun_SimpleString("import sys\n"); 38 PyRun_SimpleString("print sys.builtin_module_names\n"); 39 PyRun_SimpleString("print sys.modules.keys()\n"); 40 PyRun_SimpleString("print sys.executable\n"); 41 PyRun_SimpleString("print sys.argv\n"); 36 42 37 /* Some more application specific code */ 38 printf("\nGoodbye, cruel world\n"); 43 /* Note that you can call any public function of the Python 44 interpreter here, e.g. call_object(). */ 39 45 40 /* Exit, cleaning up the interpreter */ 41 Py_Exit(0); 42 /*NOTREACHED*/ 46 /* Some more application specific code */ 47 printf("\nGoodbye, cruel world\n"); 48 49 /* Exit, cleaning up the interpreter */ 50 Py_Exit(0); 51 /*NOTREACHED*/ 43 52 } 44 53 … … 49 58 xyzzy_foo(PyObject *self, PyObject* args) 50 59 { 51 60 return PyInt_FromLong(42L); 52 61 } 53 62 54 63 static PyMethodDef xyzzy_methods[] = { 55 {"foo", xyzzy_foo,METH_NOARGS,56 57 {NULL, NULL}/* sentinel */64 {"foo", xyzzy_foo, METH_NOARGS, 65 "Return the meaning of everything."}, 66 {NULL, NULL} /* sentinel */ 58 67 }; 59 68 … … 61 70 initxyzzy(void) 62 71 { 63 64 72 PyImport_AddModule("xyzzy"); 73 Py_InitModule("xyzzy", xyzzy_methods); 65 74 }
Note:
See TracChangeset
for help on using the changeset viewer.