在C++中的boost python嵌入,我有C++解析一個包含一個簡單函數的python(通過boost-python)文件,該函數又調用一個C++方法來完成某個實現。雖然這些看起來很荒謬,但我們選擇這樣做是爲了記錄日誌的優勢以及python提供的其他靈活性。我注意到,在Linux上,如果包含要實現的函數的python文件在Windows中編輯並因此在每行的末尾有惱人的回車符(^M
),boost python無法解析它有語法錯誤。當然,運行dos2unix
去除python文件中的^M
字符可以解決此問題。在C++我升壓蟒蛇調用的代碼片段如下,如果它可以幫助:惱人的Ctrl + M問題解析python文件
bool exec_command(const std::string& cmd, ...) {
...
...
try {
boost::python::object main = boost::python::import("__main__");
boost::python::object global(main.attr("__dict__"));
if(!context.empty()) {
boost::python::exec(
"import _project",
global,
global
);
for(smart_handle_context::const_iterator itr = handle_context.begin(); itr != hndle_context.end(); ++itr) {
global[itr->first] = boost::python::object(itr->second);
}
}
boost::python::exec(
cmd.c_str(),
global,
global
);
}
catch(boost::python::error_already_set&) {
PyErr_Print();
return false;
}
return true;
}
在上面的代碼中,smart_handle_context是地圖的std::string
s到實現特有的智能手柄上的一個typedef。我還注意到,直接在Linux中使用^M
字符的文件上運行python並不會對解析器造成任何問題。任何想法,爲什麼如何解決^M
問題,而不必運行dos2unix解決方法(希望在代碼中的修復),表示讚賞。謝謝。
我會用'的boost :: replace_all'直接(升壓字符串算法)。 – 2012-03-29 06:19:33
感謝fileoffset和matthieu。我的壞...我應該猜到了(這是令人尷尬的......應該對我的指節說唱)。 – 2012-03-29 15:01:55