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

Embedded Python: Py_Initialize: can't initialize sys standard streams

本文关键字:初始化 系统 标准 Initialize Python Py 嵌入式      更新时间:2023-10-16

问题更具体一些。我使用的是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二进制dist中复制)。我试图在调试器中跟踪问题,但我未能在合理的时间内理解python的内部结构。

有人知道可能是什么原因吗?我想这只是一个小问题,我没有意识到,但我现在有点短的选择。

这个问题有一个Python票证。不知怎么的,我第一次没能找到它,但它绝对是相关的。流在非终端应用程序中是有bug的。可以在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