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

3
问题稍微具体一些。我正在使用自己构建的Python 3.3.3版本。当我将它嵌入到我的程序中时,_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

这个问题有一个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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接