2017-02-20 20 views
0

Pythonでは、標準出力ストリームは標準出力の組み込みのsysモジュールのファイルオブジェクトとして利用できますが、私は混乱しています:まず、sysモジュールを見つけられません私は他のモジュール(modulename.__file__)を使っています。 secondond、私はstdoutファイルオブジェクトを見つける方法を知らない。Python stdoutファイルオブジェクトの場所はどこにありますか?

+0

組み込み=>いいえ '__file__'属性です。 「標準出力オブジェクトを見つけることができません」とはどういう意味ですか?どの情報に必要ですか? –

+0

@ Jean-FrançoisFabre「できない」とは、私がそれを見つける方法を知らないことを意味します。私はそれを見たいと思います。 – marco

+0

'sys.stdout'です。何がもっと必要ですか? –

答えて

1

stdoutは、sysモジュールで定義されています。 C実装を使用していると仮定して、ソースコード(3.6)をダウンロードし、Python/sysmodule.cを調べてください。あなたが見ることができるように、それはstdio Cランタイムライブラリから派生し

/* 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); 

:しかし、stdout自体が機能initstdioPython/pylifecycle.cに定義されているPyId_stdoutから割り当てられます。また、__stdout__が同時に作成されます。これは、再割り当てするとstdoutを回復するためのフォールバックとなります。

同じソースファイル内のcreate_stdioファンクションには、バッファリング、改行、エンコードなどの詳細情報も含まれています。

関連する問題