文件對象?
這此 API 是對內置文件對象的 Python 2 C API 的最小仿真,它過(guò)去依賴(lài)于 C 標準庫的緩沖 I/O (FILE*) 支持。 在 Python 3 中,文件和流使用新的 io
模塊,該模塊在操作系統的低層級無(wú)緩沖 I/O 之上定義了幾個(gè)層。 下面所描述的函數是針對這些新 API 的便捷 C 包裝器,主要用于解釋器的內部錯誤報告;建議第三方代碼改為訪(fǎng)問(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.
根據已打開(kāi)文件 fd 的文件描述符創(chuàng )建一個(gè) Python 文件對象。 參數 name, encoding, errors 和 newline 可以為
NULL
表示使用默認值;buffering 可以為 -1 表示使用默認值。 name 會(huì )被忽略?xún)H保留用于向下兼容。 失敗時(shí)返回NULL
。 有關(guān)參數的更全面描述,請參閱io.open()
函數的文檔。警告
由于Python流具有自己的緩沖層,因此將它們與 OS 級文件描述符混合會(huì )產(chǎn)生各種問(wèn)題(例如數據的意外排序)。
在 3.2 版更改: 忽略 name 屬性。
-
int PyObject_AsFileDescriptor(PyObject *p)?
- Part of the Stable ABI.
將與 p 關(guān)聯(lián)的文件描述器返回為 int 。 如果對象是整數,則返回其值。 如果沒(méi)有,則調用對象的
fileno()
方法(如果存在); 該方法必須返回一個(gè)整數,該整數作為文件描述器值返回。 設置異常并在失敗時(shí)返回-1
。
-
PyObject *PyFile_GetLine(PyObject *p, int n)?
- Return value: New reference. Part of the Stable ABI.
等價(jià)于
p.readline([n])
,這個(gè)函數從對象 p 中讀取一行。 p 可以是文件對象或具有readline()
方法的任何對象。 如果 n 是0
,則無(wú)論該行的長(cháng)度如何,都會(huì )讀取一行。 如果 n 大于``0``,則從文件中讀取不超過(guò) n 個(gè)字節;可以返回行的一部分。 在這兩種情況下,如果立即到達文件末尾,則返回空字符串。 但是,如果 n 小于0
,則無(wú)論長(cháng)度如何都會(huì )讀取一行,但是如果立即到達文件末尾,則引發(fā)EOFError
。
-
int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)?
重載
io.open_code()
的正常行為,將其形參通過(guò)所提供的處理程序來(lái)傳遞。處理程序是一個(gè)類(lèi)型為 PyObject *(*)(PyObject *path, void *userData) 的函數,其中 path 確保為
PyUnicodeObject
。userData 指針會(huì )被傳入鉤子函數。 因于鉤子函數可能由不同的運行時(shí)調用,該指針不應直接指向 Python 狀態(tài)。
鑒于這個(gè)鉤子專(zhuān)門(mén)在導入期間使用的,請避免在新模塊執行期間進(jìn)行導入操作,除非已知它們?yōu)閮鼋Y狀態(tài)或者是在
sys.modules
中可用。一旦鉤子被設定,它就不能被移除或替換,之后對
PyFile_SetOpenCodeHook()
的調用也將失敗,如果解釋器已經(jīng)被初始化,函數將返回 -1 并設置一個(gè)異常。此函數可以安全地在
Py_Initialize()
之前調用。引發(fā)一個(gè) 審計事件
setopencodehook
,不附帶任何參數。3.8 新版功能.
-
int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)?
- Part of the Stable ABI.
將對象 obj 寫(xiě)入文件對象 p 。 flags 唯一支持的標志是
Py_PRINT_RAW
;如果給定,則寫(xiě)入對象的str()
而不是repr()
。成功時(shí)返回0
,失敗時(shí)返回-1
。 將設置適當的例外。
-
int PyFile_WriteString(const char *s, PyObject *p)?
- Part of the Stable ABI.
將字符串 s 寫(xiě)入文件對象 p。 成功返回
0
失敗返回-1
;將設定相應的異常。