]> granicus.if.org Git - python/commitdiff
Solve issue 1400 at least in part -- whenever we run Python code, at the end
authorGuido van Rossum <guido@python.org>
Wed, 5 Dec 2007 05:14:58 +0000 (05:14 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 5 Dec 2007 05:14:58 +0000 (05:14 +0000)
we also flush stderr and stdout.  (XXX this may override errors if there's a problem
flushing.)

Python/pythonrun.c

index 14fe7835ee2003db0d6043372aeb401e94893e71..f95ea831aa877ad3e54944c34eaa569f6d964cb2 100644 (file)
@@ -1442,6 +1442,28 @@ PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
        return ret;
 }
 
+static void
+flush_io(void)
+{
+       PyObject *f, *r;
+       f = PySys_GetObject("stderr");
+       if (f != NULL) {
+               r = PyObject_CallMethod(f, "flush", "");
+               if (r)
+                       Py_DECREF(r);
+               else
+                       PyErr_Clear();
+       }
+       f = PySys_GetObject("stdout");
+       if (f != NULL) {
+               r = PyObject_CallMethod(f, "flush", "");
+               if (r)
+                       Py_DECREF(r);
+               else
+                       PyErr_Clear();
+       }
+}
+
 static PyObject *
 run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
         PyCompilerFlags *flags, PyArena *arena)
@@ -1453,6 +1475,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
                return NULL;
        v = PyEval_EvalCode(co, globals, locals);
        Py_DECREF(co);
+       flush_io();
        return v;
 }
 
@@ -1485,6 +1508,7 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
        if (v && flags)
                flags->cf_flags |= (co->co_flags & PyCF_MASK);
        Py_DECREF(co);
+       flush_io();
        return v;
 }