嵌入libPython时重定向stdout和stderr

嵌入libPython时重定向stdout和stderr,python,ios,Python,Ios,我已经在iOS应用程序中嵌入了libPython.a,并且正在使用PyRun\u simplefleex运行一个脚本: Py_SetPythonHome((char *)[resourcePath UTF8String]); Py_Initialize(); const char* argv[] = { … ">/dev/null" }; PySys_SetArgv(sizeof(argv)/sizeof(char*)

我已经在iOS应用程序中嵌入了libPython.a,并且正在使用
PyRun\u simplefleex
运行一个脚本:

    Py_SetPythonHome((char *)[resourcePath UTF8String]);

    Py_Initialize();

    const char* argv[] = {
       …
       ">/dev/null"
    };
    PySys_SetArgv(sizeof(argv)/sizeof(char*), (char**)argv);

    PyEval_InitThreads();

    const char* prog = ...;

    FILE* fd = fopen(prog, "r");
    if (fd == NULL) {
        ret = 1;
    } else {
        ret = PyRun_SimpleFileEx(fd, prog, 1);
        if (ret != 0)
            NSLog(@"Application quit abnormally!");
    }

    Py_Finalize();
一切正常,但我还没有找到重定向stdout/stderr的方法,这样我就不会在iOS控制台上登录

我尝试添加“>/dev/null”作为脚本的附加参数,但由于没有shell,它显然无法工作


在这种情况下,如何重定向stdout/stderr?或者,有一种方法可以“拦截”所有Python输出调用吗?谢谢。

以这种方式使用libpython时,
stdout
stderr
是调用
PyRun\u simplefleex
的进程的一部分。你可以试试

freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
如果要在脚本运行后恢复它们,应查看
dup
,首先获取原始值,然后恢复它们