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
NULLsein, 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 FehlerfallNULLzurück. Eine umfassendere Beschreibung der Argumente finden Sie in der Dokumentation der Funktionio.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-1zurü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 einerreadline()-Methode sein. Wenn n0ist, wird genau eine Zeile gelesen, unabhängig von ihrer Länge. Wenn n größer als0ist, 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 als0ist, wird eine Zeile unabhängig von ihrer Länge gelesen, aberEOFErrorwird 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
PyUnicodeObjectist.
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.modulesverfü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
setopencodehookohne Argumente aus.Hinzugefügt in Version 3.8.
-
typedef PyObject *(*Py_OpenCodeHookFunction)(PyObject*, void*)¶
-
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 diestr()des Objekts anstelle vonrepr()geschrieben. Gibt bei Erfolg0oder bei Fehler-1zurü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
0oder bei Fehler-1zurück; die entsprechende Ausnahme wird gesetzt.