[Python] [C] override stdout&stderr output from C

#include <Python.h>

typedef struct {
    PyObject_HEAD
    /* Type-specific fields go here. */
} MyStdout;

static PyObject *MyStdout_write(MyStdout* self, PyObject *args)
{
    char *data = PyString_AsString(args);
    if (data){
        printf("%s", data);
    }
    Py_RETURN_NONE;
}

static PyMethodDef MyStdout_methods[] = {
    {"write", (PyCFunction)MyStdout_write, METH_O, ""},
    {NULL}  /* Sentinel */
};

static PyTypeObject MyStdoutType = {
    PyObject_HEAD_INIT(NULL)
    0,                         /*ob_size*/
    "MyStdout",                /*tp_name*/
    sizeof(MyStdout),          /*tp_basicsize*/
    0,                         /*tp_itemsize*/
    0,                         /*tp_dealloc*/
    0,                         /*tp_print*/
    0,                         /*tp_getattr*/
    0,                         /*tp_setattr*/
    0,                         /*tp_compare*/
    0,                         /*tp_repr*/
    0,                         /*tp_as_number*/
    0,                         /*tp_as_sequence*/
    0,                         /*tp_as_mapping*/
    0,                         /*tp_hash */
    0,                         /*tp_call*/
    0,                         /*tp_str*/
    0,                         /*tp_getattro*/
    0,                         /*tp_setattro*/
    0,                         /*tp_as_buffer*/
    Py_TPFLAGS_DEFAULT,        /*tp_flags*/
    "",                        /* tp_doc */
    0,                         /* tp_traverse */
    0,                         /* tp_clear */
    0,                         /* tp_richcompare */
    0,                         /* tp_weaklistoffset */
    0,                         /* tp_iter */
    0,                         /* tp_iternext */
    MyStdout_methods,          /* tp_methods */
};

    PyObject *mystdout = NULL;

    Py_Initialize();

    if (PyType_Ready(&MyStdoutType) < 0){
        PyErr_Clear();
        goto fail;
    }

    mystdout = _PyObject_New(&MyStdoutType);
    if (PyErr_Occurred() || mystdout == NULL){
        PyErr_Clear();
        goto fail;
    }

    PySys_SetObject("stdout", mystdout);
    if (PyErr_Occurred()){
        PyErr_Clear();
        goto fail;
    }
    PySys_SetObject("stderr", mystdout);
    if (PyErr_Occurred()){
        PyErr_Clear();
        goto fail;
    }
    Py_XDECREF(mystdout);
fail:
    Py_XDECREF(mystdout);