2017-02-20 6 views
0

In Python weiß ich, dass der Standard-Ausgabestream als stdout Dateiobjekt im integrierten sys-Modul verfügbar ist, aber ich bin verwirrt: Erstens kann ich das Modul sys in der Art und Weise nicht finden Ich mache mit jedem anderen Modul (modulename.__file__); Zweitens, ich weiß nicht, wie man die stdout-Dateiobjekte findet.Wie finde ich den Speicherort des Python-stdout-Dateiobjekts?

+0

eingebaut => kein '__file__' Attribut. Was meinst du damit, "stdout objects" nicht zu finden? Welche Informationen benötigst du von ihnen? –

+0

@ Jean-FrançoisFabre "unfähig" bedeutet, dass ich nicht weiß, wie man es findet. Ich würde es gerne sehen. – marco

+0

'sys.stdout' ist es. Was brauchst du mehr? –

Antwort

1

stdout ist im Modul sys definiert. Angenommen, Sie verwenden die C-Implementierung, laden Sie den Quellcode (3.6) herunter und suchen Sie unter Python/sysmodule.c. Allerdings stdout selbst von PyId_stdout zugeordnet, die in Python/pylifecycle.c in der Funktion definiert ist initstdio:

/* Set sys.stdout */ 
fd = fileno(stdout); 
std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors); 
if (std == NULL) 
    goto error; 
PySys_SetObject("__stdout__", std); 
_PySys_SetObjectId(&PyId_stdout, std); 
Py_DECREF(std); 

Wie Sie sehen können, es stammt aus der stdio C-Laufzeitbibliothek. Außerdem wird zur gleichen Zeit erstellt, und dies ist ein Fallback, um stdout wiederherzustellen, wenn Sie es neu zuweisen. Die Funktion create_stdio in der gleichen Quelldatei enthält auch weitere Details wie Pufferung, Zeilenumbrüche und Codierung.

Verwandte Themen