File I / O in C API Python 3
-
23-08-2019 - |
Domanda
L'API C in Python 3.0 è cambiato (deprecato) molte delle funzioni per oggetti file.
Prima, in 2.X, è possibile utilizzare
PyObject* PyFile_FromString(char *filename, char *mode)
per creare un oggetto file Python, per esempio:
PyObject *myFile = PyFile_FromString("test.txt", "r");
... ma tale funzione non esiste più in Python 3.0. Quale sarebbe il Python 3.0 equivalente a tale chiamata?
Soluzione
Si può fare il vecchio (nuova?) - maniera, semplicemente chiamando il modulo IO
.Questo codice funziona, ma lo fa senza controllo degli errori. Vedere la documentazione per la spiegazione.
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();
Altri suggerimenti
Questa pagina sostiene l'API è:
PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *newline, int closefd);
Non sono sicuro se questo significa che non è possibile avere Python aprire il file dal nome del file, ma che dovrebbe essere banale da fare da soli, in C.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow