嵌入式Python:Py_Initialize:无法初始化sys标准流

时间:2014-05-16 19:11:00

标签: python c++ visual-studio-2012 stream

问题有点具体。我使用3.3.3版本的Python并自己构建它。当我将其嵌入我的程序_Py_InitializeEx_Private()时,会出现此错误Py_Initialize: can't initialize sys standard streams

背景:我正在使用Visual Studio 2012 Express并在boost线程中启动Python。 简而言之,电话看起来像是:

int SubSysPython::Start()
{
    m_PythonThread = boost::thread(&SubSysPython::StartPython, this);
    return m_RC;
}

void SubSysPython::StartPython()
{
    Py_Initialize();
    FILE* fp = nullptr;
    fopen_s(&fp, startScript.c_str(), "r");
    PyRun_SimpleFile(fp, startScript.c_str());
    fclose(fp);
    Py_Finalize();
}

从工作版本复制库,python lib文件夹是原始的(从3.3.3二进制文件复制)。我试图在调试器中追查问题,但我在合理的时间内无法理解python内部。

有人有任何想法可能是什么原因?我想这只是一个我不知道的小问题,但我现在的选项有点短......

1 个答案:

答案 0 :(得分:0)

这个问题有一张Python票。不知怎的,我第一次没找到它,但它确实很有意义。这些流在非终端应用程序中被窃听。它可以在Python代码中修复:

#ifdef MS_WINDOWS
    if (!is_valid_fd(fd) || GetStdHandle(STD_INPUT_HANDLE) == NULL) {
#else
    if (!is_valid_fd(fd)) {
#endif

在!is_valid_fd()段落。

可在此处找到该票证:Issue17797