【问题标题】:Embedded Python: Py_Initialize: can't initialize sys standard streams嵌入式 Python:Py_Initialize:无法初始化 sys 标准流
【发布时间】:2014-07-05 08:36:21
【问题描述】:

问题更具体一点。我使用的是 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 内部结构。

有人知道可能是什么原因吗?我想这只是我不知道的一个小问题,但目前我的选择有点少..

【问题讨论】:

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


    【解决方案1】:

    有一个 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

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 2015-08-02
      • 1970-01-01
      • 2021-06-20
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多