我正在将 Python 嵌入到我的 C++ 程序中,并且非常有效地使用了 PyRun_SimpleString,但现在遇到了麻烦。
我所做的是将 python.py 文件加载到 std::string 但现在运行它时遇到问题。 PyRun_SimpleFileEx 似乎也没有做到这一点,所以一些帮助会很棒!
std::string content;
if(!ail::read_file(python_script, content))
{
error("Failed to load Python script \"" + python_script + "\"");
return false;
}
if(prompt_mode)
initialise_console();
content = ail::replace_string(content, "\r", "");
Py_Initialize();
initialise_module();
std::string script_directory;
if(get_base_name(python_script, script_directory))
PyRun_SimpleString(("import sys\nsys.path.append('" + script_directory + "')\n").c_str());
write_line("Script dir: " + script_directory);
////-python_script H:\\CRAW\\craw\\script\\craw.py
//content.c_str()
//FILE *fp;
//fp = fopen("H:\\CRAW\\craw\\script\\craw.py", "r");
//PyRun_SimpleFileEx(fp, "craw.py", 1);
if(PyRun_SimpleString(content.c_str()) != 0)
{
write_line("The main Python script contained errors.");
return false;
}
//PyRun_SimpleString(("execfile('" + ail::replace_string(python_script, "\\", "\\\\") + "')").c_str());
return true;
我通过使用字符串向量并将文件的每一行读入向量中,然后使用 PyRun_SimpleString 执行每一行来解决我的问题。
这是完成的代码,但没有错误检查。
std::vector 字符串向量;
std::字符串内容;
if(python_script.empty())
返回真;
ail::read_lines(python_script, string_vector);
if(!ail::read_file(python_script, content))
{
error("Failed to load Python script \"" + python_script + "\"");
return false;
}
if(prompt_mode)
initialise_console();
content = ail::replace_string(content, "\r", "");
Py_Initialize();
initialise_module();
std::string script_directory;
if(get_base_name(python_script, script_directory))
PyRun_SimpleString(("import sys\nsys.path.append('" + script_directory + "')\n").c_str());
for(int i = 0; i < string_vector.size(); i++)
{
string_vector[i] = ail::replace_string(string_vector[i], "\r", "");
PyRun_SimpleString(string_vector[i].c_str());
}
return true;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)