Problem flushing stderr in embedded python

Farshid Lashkari lashkariNO at SPAMworldviz.com
Mon Nov 8 16:18:45 EST 2004


Hi,

My application has python embedded into it. I noticed that when I run any
python code the output is buffered and doesn't get flushed until my
application exits. To fix this I simply flush sys.stdout and sys.stderr
every once in while by using the following code:

//Get handle to python stdout file and flush it
PyObject *pyStdout = PySys_GetObject("stdout");
if(pyStdout && PyFile_Check(pyStdout)) {
    PyObject *result = PyObject_CallMethod(pyStdout,"flush",NULL);
    Py_XDECREF(result);
}

//Get handle to python stderr file and flush it
PyObject *pyStderr = PySys_GetObject("stderr");
if(pyStderr && PyFile_Check(pyStderr)) {
    PyObject *result = PyObject_CallMethod(pyStderr,"flush",NULL);
    Py_XDECREF(result);
}

This works for stdout but not for stderr. In order to flush stderr I have to
do:

PyRun_SimpleString("sys.stderr.flush()");

Does anybody know why my first method doesn't work with stderr? I checked
and PyObject_CallMethod is being called for both objects and no errors are
occuring. The solution I have is acceptable, but I would still like to know
why my first method didn't work.

BTW, I'm running python 2.3 on Windows XP

Thanks,

Farshid





More information about the Python-list mailing list