/* Example of embedding Python in another program */ #include "Python.h" #include "macglue.h" static char *argv0; long my_writehandler(char *buf, long count) { long mycount; unsigned char mybuf[255]; mycount = count; if (mycount > 255 ) mycount = 255; mybuf[0] = (unsigned char)mycount; strncpy((char *)mybuf+1, buf, mycount); DebugStr(mybuf); return count; } main(argc, argv) int argc; char **argv; { /* So the user can set argc/argv to something interesting */ argc = ccommand(&argv); /* Save a copy of argv0 */ argv0 = argv[0]; /* If the first option is "-q" we don't open a console */ if ( argc > 1 && strcmp(argv[1], "-q") == 0 ) { PyMac_SetConsoleHandler(PyMac_DummyReadHandler, PyMac_DummyWriteHandler, PyMac_DummyWriteHandler); } else if ( argc > 1 && strcmp(argv[1], "-d") == 0 ) { PyMac_SetConsoleHandler(PyMac_DummyReadHandler, my_writehandler, my_writehandler); } /* Initialize the Python interpreter. Required. */ PyMac_Initialize(); /* Define sys.argv. It is up to the application if you want this; you can also let it undefined (since the Python code is generally not a main program it has no business touching sys.argv...) */ PySys_SetArgv(argc, argv); /* Do some application specific code */ printf("Hello, brave new world\n\n"); /* Execute some Python statements (in module __main__) */ PyRun_SimpleString("import sys\n"); PyRun_SimpleString("print sys.builtin_module_names\n"); PyRun_SimpleString("print sys.argv\n"); /* Note that you can call any public function of the Python interpreter here, e.g. call_object(). */ /* Some more application specific code */ printf("\nGoodbye, cruel world\n"); /* Exit, cleaning up the interpreter */ Py_Exit(0); /*NOTREACHED*/ } /* This function is called by the interpreter to get its own name */ char * getprogramname() { return argv0; }