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

3 投票
1 回答
1986 浏览
提问于 2025-04-18 06:48

这个问题有点具体。我使用的是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的库文件夹是原版的(从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

撰写回答