File Objects

Diese APIs sind eine minimale Emulation der Python 2 C API für eingebaute Datei-Objekte, die sich auf die Puffer-I/O-Unterstützung (FILE*) der C-Standardbibliothek stützten. In Python 3 verwenden Dateien und Streams das neue io-Modul, das mehrere Schichten über der Low-Level-unbuffered I/O des Betriebssystems definiert. Die unten beschriebenen Funktionen sind bequeme C-Wrapper über diesen neuen APIs und hauptsächlich für die interne Fehlerberichterstattung im Interpreter gedacht; Drittanbieter-Code wird empfohlen, stattdessen auf die io APIs zuzugreifen.

PyObject *PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erstellt ein Python-Datei-Objekt aus dem Dateideskriptor einer bereits geöffneten Datei fd. Die Argumente name, encoding, errors und newline können NULL sein, um die Standardwerte zu verwenden; buffering kann -1 sein, um den Standardwert zu verwenden. name wird ignoriert und aus Kompatibilitätsgründen beibehalten. Gibt im Fehlerfall NULL zurück. Eine umfassendere Beschreibung der Argumente finden Sie in der Dokumentation der Funktion io.open().

Warnung

Da Python-Streams ihre eigene Pufferschicht haben, kann das Mischen mit Dateideskriptoren auf Betriebssystemebene verschiedene Probleme verursachen (wie z. B. unerwartete Datenreihenfolge).

Geändert in Version 3.2: Ignoriert das Attribut name.

int PyObject_AsFileDescriptor(PyObject *p)
Teil der Stable ABI.

Gibt den Dateideskriptor, der mit p verbunden ist, als int zurück. Wenn das Objekt eine Ganzzahl ist, wird sein Wert zurückgegeben. Andernfalls wird die Methode fileno() des Objekts aufgerufen, falls sie existiert; die Methode muss eine Ganzzahl zurückgeben, die als Wert des Dateideskriptors zurückgegeben wird. Setzt eine Ausnahme und gibt im Fehlerfall -1 zurück.

PyObject *PyFile_GetLine(PyObject *p, int n)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Entspricht p.readline([n]). Diese Funktion liest eine Zeile aus dem Objekt p. p kann ein Datei-Objekt oder ein beliebiges Objekt mit einer readline()-Methode sein. Wenn n 0 ist, wird genau eine Zeile gelesen, unabhängig von ihrer Länge. Wenn n größer als 0 ist, werden nicht mehr als n Bytes aus der Datei gelesen; eine partielle Zeile kann zurückgegeben werden. In beiden Fällen wird ein leerer String zurückgegeben, wenn das Ende der Datei sofort erreicht wird. Wenn n jedoch kleiner als 0 ist, wird eine Zeile unabhängig von ihrer Länge gelesen, aber EOFError wird ausgelöst, wenn das Ende der Datei sofort erreicht wird.

int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)

Überschreibt das normale Verhalten von io.open_code(), um seinen Parameter über den bereitgestellten Handler zu übergeben.

Der handler ist eine Funktion vom Typ

typedef PyObject *(*Py_OpenCodeHookFunction)(PyObject*, void*)

Entspricht PyObject *(*)(PyObject *path, void *userData), wobei path garantiert ein PyUnicodeObject ist.

Der Zeiger userData wird an die Hook-Funktion übergeben. Da Hook-Funktionen aus verschiedenen Laufzeiten aufgerufen werden können, sollte dieser Zeiger nicht direkt auf Python-Zustand verweisen.

Da dieser Hook absichtlich während des Imports verwendet wird, vermeiden Sie den Import neuer Module während seiner Ausführung, es sei denn, sie sind als eingefroren oder in sys.modules verfügbar bekannt.

Sobald ein Hook gesetzt ist, kann er nicht entfernt oder ersetzt werden, und spätere Aufrufe von PyFile_SetOpenCodeHook() schlagen fehl. Im Fehlerfall gibt die Funktion -1 zurück und setzt eine Ausnahme, wenn der Interpreter initialisiert wurde.

Diese Funktion kann sicher vor Py_Initialize() aufgerufen werden.

Löst ein Auditing-Ereignis setopencodehook ohne Argumente aus.

Hinzugefügt in Version 3.8.

int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)
Teil der Stable ABI.

Schreibt das Objekt obj in das Datei-Objekt p. Das einzige unterstützte Flag für flags ist Py_PRINT_RAW; wenn es angegeben ist, wird die str() des Objekts anstelle von repr() geschrieben. Gibt bei Erfolg 0 oder bei Fehler -1 zurück; die entsprechende Ausnahme wird gesetzt.

int PyFile_WriteString(const char *s, PyObject *p)
Teil der Stable ABI.

Schreibt den String s in das Datei-Objekt p. Gibt bei Erfolg 0 oder bei Fehler -1 zurück; die entsprechende Ausnahme wird gesetzt.