嵌入式Python:Py_Initialize:无法初始化系统标准流
这个问题有点具体。我使用的是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