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?

È stato utile?

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
scroll top