More Questions on Embedding Python

Gerson Kurz gerson.kurz at t-online.de
Sun Dec 31 11:34:57 EST 2000


1. Question: 

The following script, slightly modified from demo/embed.c, works just
as expected.
-----------------------------------------------------------
static PyObject* gped_OutputDebugString(
	PyObject *self, PyObject *args )
{
    char* buffer = 0;
    if( PyArg_ParseTuple(args, "s", &buffer))
        OutputDebugString(buffer);
    return NULL;
}

static PyMethodDef gped_methods[] = {
    {"OutputDebugString", gped_OutputDebugString, 1},
    {NULL, NULL}
};

bool PythonSupport::Initialize()
{
    Py_Initialize();
    Py_SetProgramName("gped");
    PyObject* pThisModule = PyImport_AddModule("gped");
    Py_InitModule("gped", gped_methods);

    // startup code
    PyRun_SimpleString("import gped, sys\n");
    PyRun_SimpleString("class gped_stdout:\n"
                       "\tdef write(self,str):\n"
                       "\t\tgped.OutputDebugString(str)\n"
                       "\t\treturn 1\n" );
    PyRun_SimpleString("sys.stdout = gped_stdout()\n" );
    PyRun_SimpleString("print(\"Hello, World\")\n" );
    PyRun_SimpleString("print sys.modules.keys()\n" );
    return true;
}
-----------------------------------------------------------
I will see both "Hello, World" and the sys keys. However, if I issue 

    PyRun_SimpleString("sys.stderr = gped_stdout()\n" );

right before the Hello World statement, I get a "SystemError", and DO
NOT see the keys. Can somebody please explain ?

2. Question: 

Say I want to use a Python as a configuration script for my editor.
For example, I would like to have a configure.py that contains the
lines

	gped.MainWindowPos = [0,0,1024,800]

How can I query that list ? If I use PyArg_ParseTuples, I must first
have a parent object to begin with. 

3. Happy New Year!




More information about the Python-list mailing list