Escrever código de extensão C que consome dados de qualquer objeto semelhante a arquivo Python (por exemplo, arquivos normais, objetos StringIO, etc.). read()O método deve ser chamado repetidamente para consumir dados em um objeto semelhante a um arquivo e executar etapas para decodificar adequadamente os dados resultantes.
A seguir, é fornecida uma função de extensão C que apenas consome todos os dados em um objeto semelhante a um arquivo e os despeja na saída padrão.

#define CHUNK_SIZE 8192 
static PyObject* py_consume_file(PyObject* self, PyObject* args) 
{ 
    PyObject* obj; 
    PyObject* read_meth; 
    PyObject* result = NULL; 
    PyObject* read_args; 
  
    if (!PyArg_ParseTuple(args, "O", &obj)) { 
        return NULL; 
    } 
  
    
    if ((read_meth = PyObject_GetAttrString(obj, "read")) == NULL) { 
        return NULL; 
    } 
  
    
    read_args = Py_BuildValue("(i)", CHUNK_SIZE); 
    while (1) { 
        PyObject* data; 
        PyObject* enc_data; 
        char* buf; 
        Py_ssize_t len; 
        if ((data = PyObject_Call(read_meth, read_args, NULL)) == NULL) { 
            goto final; 
        } 
        if (PySequence_Length(data) == 0) { 
            Py_DECREF(data); 
            break; 
        } 
        if ((enc_data = PyUnicode_AsEncodedString(data, 
             "utf-8", "strict")) == NULL) { 
            Py_DECREF(data); 
            goto final; 
        } 
        PyBytes_AsStringAndSize(enc_data, &buf, &len); 
        write(1, buf, len); 
        Py_DECREF(enc_data); 
        Py_DECREF(data); 
    } 
    result = Py_BuildValue(""); 
  
final: 
    
    Py_DECREF(read_meth); 
    Py_DECREF(read_args); 
    return result; 
}