2017-02-20 53 views
0

在Python中,我知道標準輸出流可用作內置sys模塊中的標準輸出文件對象,但我很困惑:首先,我無法找到sys模塊我使用任何其他模塊(modulename.__file__); secondond,我不知道如何找到標準輸出文件對象。如何找到Python stdout文件對象的位置?

+0

built-in => no'__file__'屬性。 「無法找到stdout對象」是什麼意思?你需要哪些信息? –

+0

@ Jean-FrançoisFabre「無法」意味着我不知道如何找到它。我想看看它。 – marco

+0

'sys.stdout'就是這樣。你還需要什麼? –

回答

1

stdoutsys模塊中定義。假設您正在使用C實現,請下載源代碼(3.6)並查看Python/sysmodule.c。然而,stdout本身是從PyId_stdout這是在Python/pylifecycle.c在功能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); 

正如你所看到的,它是從stdio C運行時庫的。此外,__stdout__是同時創建的,如果您重新分配它,這意味着要回收stdout

同一源文件中的函數create_stdio還包含更多細節,如緩衝,換行符和編碼。