Changeset 388 for python/vendor/current/Demo/embed
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- Location:
- python/vendor/current/Demo/embed
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Demo/embed/Makefile
r2 r388 1 1 # Makefile for embedded Python use demo. 2 # (This version tailored for my Red Hat Linux 6.1 setup;2 # (This version originally written on Red Hat Linux 6.1; 3 3 # edit lines marked with XXX.) 4 4 … … 11 11 12 12 # Python version 13 VERSION= 2. 613 VERSION= 2.7 14 14 15 15 # Compiler flags … … 22 22 LIBPYTHON= $(blddir)/libpython$(VERSION).a 23 23 24 # XXX edit LIBS (in particular) to match $(blddir)/M odules/Makefile24 # XXX edit LIBS (in particular) to match $(blddir)/Makefile 25 25 LIBS= -lnsl -ldl -lreadline -ltermcap -lieee -lpthread -lutil 26 26 LDFLAGS= -Xlinker -export-dynamic -
python/vendor/current/Demo/embed/demo.c
r2 r388 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 } -
python/vendor/current/Demo/embed/loop.c
r2 r388 7 7 main(int argc, char **argv) 8 8 { 9 10 9 int count = -1; 10 char *command; 11 11 12 13 14 15 16 12 if (argc < 2 || argc > 3) { 13 fprintf(stderr, "usage: loop <python-command> [count]\n"); 14 exit(2); 15 } 16 command = argv[1]; 17 17 18 19 20 18 if (argc == 3) { 19 count = atoi(argv[2]); 20 } 21 21 22 22 Py_SetProgramName(argv[0]); 23 23 24 25 24 /* uncomment this if you don't want to load site.py */ 25 /* Py_NoSiteFlag = 1; */ 26 26 27 28 29 30 31 32 27 while (count == -1 || --count >= 0 ) { 28 Py_Initialize(); 29 PyRun_SimpleString(command); 30 Py_Finalize(); 31 } 32 return 0; 33 33 }
Note:
See TracChangeset
for help on using the changeset viewer.