Python 版本 = 2.7,Windows
你好,
我的 Python 脚本使用共享 C 库,我想重定向脚本的标准 IO 和文件中的共享 C 库,如下例所示(仅限于 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 不一样吗?在这种情况下,如何将两者重定向到同一个文件?