Crossfire comporte un plugin permettant d’exécuter des scripts Python. Un des problèmes posés était que les variables Python persistaient entre les exécutions de scripts. Après un passage sur #python, la solution suivante est apparue.
dict = PyDict_New();
PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins());
ret = PyRun_File(scriptfile, scriptname, Py_file_input, dict, dict);
if (PyErr_Occurred()) {
PyErr_Print();
}
Py_XDECREF(ret);
Py_DECREF(dict);En l’occurrence l’utilisation de la fonction PyEval_GetBuiltins.
Cela fonctionne, peut-être qu’il reste des références pas libérées, difficile à dire...
De plus la fonction n’est pas documentée, donc changera peut-être sur une prochaine version de Python.