文件對(duì)象?

這此 API 是對(duì)內(nèi)置文件對(duì)象的 Python 2 C API 的最小仿真,它過(guò)去依賴于 C 標(biāo)準(zhǔn)庫(kù)的緩沖 I/O (FILE*) 支持。 在 Python 3 中,文件和流使用新的 io 模塊,該模塊在操作系統(tǒng)的低層級(jí)無(wú)緩沖 I/O 之上定義了幾個(gè)層。 下面所描述的函數(shù)是針對(duì)這些新 API 的便捷 C 包裝器,主要用于解釋器的內(nèi)部錯(cuò)誤報(bào)告;建議第三方代碼改為訪問(wèn) io API。

PyObject *PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)?
Return value: New reference. Part of the Stable ABI.

根據(jù)已打開(kāi)文件 fd 的文件描述符創(chuàng)建一個(gè) Python 文件對(duì)象。 參數(shù) name, encoding, errorsnewline 可以為 NULL 表示使用默認(rèn)值;buffering 可以為 -1 表示使用默認(rèn)值。 name 會(huì)被忽略僅保留用于向下兼容。 失敗時(shí)返回 NULL。 有關(guān)參數(shù)的更全面描述,請(qǐng)參閱 io.open() 函數(shù)的文檔。

警告

由于Python流具有自己的緩沖層,因此將它們與 OS 級(jí)文件描述符混合會(huì)產(chǎn)生各種問(wèn)題(例如數(shù)據(jù)的意外排序)。

在 3.2 版更改: 忽略 name 屬性。

int PyObject_AsFileDescriptor(PyObject *p)?
Part of the Stable ABI.

將與 p 關(guān)聯(lián)的文件描述器返回為 int 。 如果對(duì)象是整數(shù),則返回其值。 如果沒(méi)有,則調(diào)用對(duì)象的 fileno() 方法(如果存在); 該方法必須返回一個(gè)整數(shù),該整數(shù)作為文件描述器值返回。 設(shè)置異常并在失敗時(shí)返回 -1。

PyObject *PyFile_GetLine(PyObject *p, int n)?
Return value: New reference. Part of the Stable ABI.

等價(jià)于 p.readline([n]) ,這個(gè)函數(shù)從對(duì)象 p 中讀取一行。 p 可以是文件對(duì)象或具有 readline() 方法的任何對(duì)象。 如果 n0 ,則無(wú)論該行的長(zhǎng)度如何,都會(huì)讀取一行。 如果 n 大于``0``,則從文件中讀取不超過(guò) n 個(gè)字節(jié);可以返回行的一部分。 在這兩種情況下,如果立即到達(dá)文件末尾,則返回空字符串。 但是,如果 n 小于 0 ,則無(wú)論長(zhǎng)度如何都會(huì)讀取一行,但是如果立即到達(dá)文件末尾,則引發(fā) EOFError。

int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)?

重載 io.open_code() 的正常行為,將其形參通過(guò)所提供的處理程序來(lái)傳遞。

處理程序是一個(gè)類型為 PyObject *(*)(PyObject *path, void *userData) 的函數(shù),其中 path 確保為 PyUnicodeObject。

userData 指針會(huì)被傳入鉤子函數(shù)。 因于鉤子函數(shù)可能由不同的運(yùn)行時(shí)調(diào)用,該指針不應(yīng)直接指向 Python 狀態(tài)。

鑒于這個(gè)鉤子專門在導(dǎo)入期間使用的,請(qǐng)避免在新模塊執(zhí)行期間進(jìn)行導(dǎo)入操作,除非已知它們?yōu)閮鼋Y(jié)狀態(tài)或者是在 sys.modules 中可用。

一旦鉤子被設(shè)定,它就不能被移除或替換,之后對(duì) PyFile_SetOpenCodeHook() 的調(diào)用也將失敗,如果解釋器已經(jīng)被初始化,函數(shù)將返回 -1 并設(shè)置一個(gè)異常。

此函數(shù)可以安全地在 Py_Initialize() 之前調(diào)用。

引發(fā)一個(gè) 審計(jì)事件 setopencodehook,不附帶任何參數(shù)。

3.8 新版功能.

int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)?
Part of the Stable ABI.

將對(duì)象 obj 寫入文件對(duì)象 p 。 flags 唯一支持的標(biāo)志是 Py_PRINT_RAW;如果給定,則寫入對(duì)象的 str() 而不是 repr()。成功時(shí)返回 0,失敗時(shí)返回 -1。 將設(shè)置適當(dāng)?shù)睦狻?/p>

int PyFile_WriteString(const char *s, PyObject *p)?
Part of the Stable ABI.

將字符串 s 寫入文件對(duì)象 p。 成功返回 0 失敗返回 -1;將設(shè)定相應(yīng)的異常。