Fichier E / S dans le Python 3 API C
-
23-08-2019 - |
Question
L'API C en Python 3.0 a changé (dépréciée) un grand nombre de fonctions pour les objets de fichier.
Avant, 2.x, vous pouvez utiliser
PyObject* PyFile_FromString(char *filename, char *mode)
pour créer un objet de fichier de python, par exemple:
PyObject *myFile = PyFile_FromString("test.txt", "r");
... mais cette fonction n'existe plus dans Python 3.0. Quel serait le Python 3.0 équivalent à un tel appel?
La solution
Vous pouvez le faire l'ancien (nouveau?) - fashioned way, simplement appeler le module io
.Ce code fonctionne, mais il ne vérifie pas d'erreur. Voir la documentation pour l'explication.
PyObject *ioMod, *openedFile;
PyGILState_STATE gilState = PyGILState_Ensure();
ioMod = PyImport_ImportModule("io");
openedFile = PyObject_CallMethod(ioMod, "open", "ss", "foo.txt", "wb");
Py_DECREF(ioMod);
PyObject_CallMethod(openedFile, "write", "y", "Written from Python C API!\n");
PyObject_CallMethod(openedFile, "flush", NULL);
PyObject_CallMethod(openedFile, "close", NULL);
Py_DECREF(openedFile);
PyGILState_Release(gilState);
Py_Finalize();
Autres conseils
Cette page réclame l'API est:
PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *newline, int closefd);
Je ne sais pas si cela signifie qu'il est impossible d'avoir Python ouvrir le fichier à partir du nom de fichier, mais cela devrait être trivial pour vous faire, en C.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow