bpo-36829: sys.excepthook and sys.unraisablehook flush (GH-13620)

sys.excepthook() and sys.unraisablehook() now explicitly flush the
file (usually sys.stderr).

If file.flush() fails, sys.excepthook() silently ignores the error,
whereas sys.unraisablehook() logs the new exception.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index ba1d1cf..ace9f2f 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -978,6 +978,16 @@
     }
     print_exception_recursive(file, value, seen);
     Py_XDECREF(seen);
+
+    /* Call file.flush() */
+    PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+    if (!res) {
+        /* Silently ignore file.flush() error */
+        PyErr_Clear();
+    }
+    else {
+        Py_DECREF(res);
+    }
 }
 
 void