21.12.2022 Views

python_para_desenvolvedores_2ed

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

320 Integração com outras linguagens

if (!PyArg_ParseTuple(args, "s", &command))

// retornando NULL gera uma excessao

// caso falte parametros

return NULL;

// chamando "system":

sts = system(command);

// "Py_BuildValue" gera objetos que o Python conhece

// "i" significa inteiro

return Py_BuildValue("i", sts);

}

// Tabela que o Python consulta para resolver

// os metodos do modulo e pode ser usado

// tambem para gerar a documentacao

// por instrospeccao: dir(), help(),...

static PyMethodDef MyModuleMethods[] = {

{"system", mymodule_system, METH_VARARGS,

"Executa comandos externos."},

// Fim da tabela:

{NULL, NULL, 0, NULL}

};

// inicializacao do modulo:

PyMODINIT_FUNC

initmymodule(void)

{

// O modulo tambem e' um objeto

PyObject *m;

// "Py_InitModule" precisa do nome do modulo e da

// tabela de metodos

m = Py_InitModule("mymodule", MyModuleMethods);

// Erros...

MyModuleError = PyErr_NewException("mymodule.error",

NULL, NULL);

// "Py_INCREF" incrementa o numero de referencias do objeto

Py_INCREF(MyModuleError);

// "PyModule_AddObject" adiciona um objeto ao modulo

PyModule_AddObject(m, "error", MyModuleError);

}

Ao invés de compilar o módulo manualmente, use o Python para

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!