小编典典

Python 3 C API中的文件I / O

python

Python 3.0中的C API已更改(不建议使用)文件对象的许多功能。

以前,在2.X中,您可以使用

PyObject* PyFile_FromString(char *filename, char *mode)

创建一个Python文件对象,例如:

PyObject *myFile = PyFile_FromString("test.txt", "r");

…但是该功能在Python 3.0中不再存在。相当于此类调用的Python 3.0将是什么?


阅读 223

收藏
2021-01-20

共1个答案

小编典典

您可以通过调用io模块,以旧的(新的?)方式进行操作。

该代码有效,但是不进行错误检查。请参阅文档以获取解释。

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();
2021-01-20