各位过路的大神,请问为什么在MFC框架中调用python脚本,脚本里面不能包含有任何能在python console里面输出的语句,一旦有,脚本运行到这里就结束了。相应的函数或类调用返回就是NULL!!!!
回忆下你在MFC中用的printf()打印输出有效吗?如果无效 说明console(标准输出)本身没有启动,所以Python中print试图向标准输出的时候出现异常了(猜测,未验证)。
参考在MFC开后台console窗口的解决办法:1.在stdafx.h中添加#pragma comment( linker, "/subsystem:console" ) 2.如果是对话框在OnInitDialog中添加AllocConsole(),如果是单文档或多文档一般在InitInstance()中添加。
如果在MFC程序中调出console窗口正常了,再尝试用python print语句是否正常。
这个是在vs2015 MFC程序调出console窗口的一个例子:
我有点好奇,题主是怎么在MFC框架中调用python脚本的?能贴一下代码,或者截个图吗?
//*python调用*//
// 初始化python模块
Py_Initialize();
//检查初始化是否成功
if (!Py_IsInitialized())
{
printf("初始化失败");
Py_Finalize();
}
PyObject* pModule;
PyObject* pFunc = NULL;
PyObject* pArg = NULL;
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");//设置python模块,搜寻位置,文件放在.cpp文件
pModule = PyImport_ImportModule("batch");//The file name of python
if (!pModule)
{
printf("Failed to import py file!");
Py_Finalize();
}
else
{
PyRun_SimpleString("import os");
PyRun_SimpleString("os.chdir('./')");
pFunc = PyObject_GetAttrString(pModule, "generate");// The function name in Python file
if (!pFunc)
{
printf("Failed to import function! ");
Py_Finalize();
}
}
PyObject* pyParams = Py_BuildValue("()");
int result=0;
pArg = PyEval_CallObject(pFunc, pyParams);
PyArg_Parse(pArg, "i", &result);
CString str;
str.Format(_T("%d"), result);
MessageBox(NULL, LPCTSTR(str), TEXT("HelloMsg"), 0);
在按钮里面响应~