Pythonバージョン=2.7、Windows
やあ、
私のPythonスクリプトは共有Cライブラリを使用しており、次の例のように、スクリプトと共有Cライブラリの標準IOをファイルにリダイレクトしたいと思います(stderrストリームに限定)
C共有ライブラリコード:
#include <stdio.h>
void my_print(void)
{
fprintf(stderr, "This string isn't displayed\n");
}
Pythonスクリプト:
import os, sys, ctypes
def test():
parserDll = ctypes.CDLL("./titi.dll") # my shared C library
file_stderr_fds = os.open("./toto.txt", 777) # file in which redirect the stderr
saved_stderr_fds = os.dup(2) # Backup stderr
os.dup2(file_stderr_fds, 2) # Redirect stderr to file
print >> sys.stderr, "zozo" # Python test redirect for Python script --> Ok
parserDll.my_print(None) # test for the shared C library --> KO
if __name__ == "__main__":
test()
このPythonスクリプトを実行すると、toto.txtファイルで「zozo」(Pythonスクリプトから表示)を読み取りましたが、共有Cライブラリからは何も読み取りませんでした。ただし、os.dup2()をコメントアウトすると、両方の文字列がコンソールに表示されます。なんで?使用されるPythonスクリプトと共有Cライブラリの標準IOは同じではありませんか?この場合、どうすれば両方を同じファイルにリダイレクトできますか?