これは私の最近の 2 つの質問の組み合わせです:
[1] C での Python インスタンス メソッド
[2] Python で stderr をリダイレクトする方法は?
Python スクリプトから stdout と stderr の両方の出力をログに記録したいと思います。
私が聞きたいのは、[1] に従って新しい型を作成するのはかなり複雑に思えるということです。新しい型を Python に公開する必要がない場合、つまり C にのみ存在する場合、物事は単純になりますか?
つまり、Python が何かを出力すると、"Objects/fileobject.c" に移動し、"PyFile_WriteObject" でその引数に書き込むことができるかどうかをチェックします。
writer = PyObject_GetAttrString(f, "write");
if (writer == NULL)
...
また、次のように stdout と stderr を取得することもできます。
PyObject* out = PySys_GetObject("stdout");
PyObject* err = PySys_GetObject("stderr");
私の質問は、上記の 'PyObject_GetAttrString(f, "write")' を満たし、呼び出し可能であるため、次のように書くことができる必要な PyObject を構築することは何とか可能ですか?
PySys_SetObject("stdout", <my writer object / class / type / ?>);
http://docs.python.org/c-api/sys.html?highlight=pysys_setobject#PySys_SetObject
このようにすると、新しい「ライター タイプ」を Python スクリプトの残りの部分に公開する必要がなくなるので、コードを書くのが少し簡単になるのではないかと思いました...?