2010-10-26 67 views
0

我將Python嵌入到我的C++程序中,並且相當有效地使用了PyRun_SimpleString,但現在遇到了問題。如何運行python文件,使用PyRun讀入std :: string

我所做的是加載一個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; 
+2

發佈您的代碼的一個小樣本,所以我們知道你在做什麼會很棒! – 2010-10-26 22:48:39

+0

提供有問題的代碼 – pyfunc 2010-10-26 22:49:10

+1

如果你需要一個char指針(我不知道PyRun是如何工作的),那麼解決方案可能就像調用std :: strings的c_str方法一樣簡單。 – 2010-10-26 22:54:48

回答

0

我使用字符串矢量和讀取文件的每一行到載體,然後執行每一個使用PyRun_SimpleString解決了問題。

這裏是完成的代碼,雖然沒有錯誤檢查。 std :: vector string_vector; std :: string的內容; (python_script.empty()) 返回true;如果(python_script.empty()) 返回true;

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; 
相關問題