Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
烦人的Ctrl+;解析python文件的问题 在C++中的PosithPython嵌入中,我有C++解析Python(通过Boost Python)文件,包含一个简单的函数,这又调用C++方法来完成某个实现。虽然这些看起来很荒谬,但我们选择这样做是因为日志记录的优势和python提供的其他灵活性_C++_Python_Boost_Boost Python - Fatal编程技术网

烦人的Ctrl+;解析python文件的问题 在C++中的PosithPython嵌入中,我有C++解析Python(通过Boost Python)文件,包含一个简单的函数,这又调用C++方法来完成某个实现。虽然这些看起来很荒谬,但我们选择这样做是因为日志记录的优势和python提供的其他灵活性

烦人的Ctrl+;解析python文件的问题 在C++中的PosithPython嵌入中,我有C++解析Python(通过Boost Python)文件,包含一个简单的函数,这又调用C++方法来完成某个实现。虽然这些看起来很荒谬,但我们选择这样做是因为日志记录的优势和python提供的其他灵活性,c++,python,boost,boost-python,C++,Python,Boost,Boost Python,我注意到,在Linux上,如果包含要实现的函数的python文件是在Windows中编辑的,因此在每行末尾都有令人讨厌的回车符(^M),那么boost python将无法解析它,并出现语法错误。当然,运行dos2unix从python文件中删除^M字符可以解决这个问题。在C++中,我的PosithPython调用的一个片段如下,如果它有帮助: bool exec_command(const std::string& cmd, ...) { ... ... try {

我注意到,在Linux上,如果包含要实现的函数的python文件是在Windows中编辑的,因此在每行末尾都有令人讨厌的回车符(
^M
),那么boost python将无法解析它,并出现语法错误。当然,运行
dos2unix
从python文件中删除
^M
字符可以解决这个问题。在C++中,我的PosithPython调用的一个片段如下,如果它有帮助:

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映射到特定于实现的智能句柄的类型定义。我还注意到,在Linux中直接在带有
^M
字符的文件上运行python不会给它的解析器带来任何问题。对于为什么不必运行dos2unix解决方案(希望代码中有一个补丁)就可以绕过
^M
问题,我们非常感谢您的任何想法。谢谢。

您可以定义一个从字符串中删除0x0D字符的函数,类似于:

#include <algorithm>

std::string removeWindowsLineEndings(std::string s)
{
    s.erase(std::remove(s.begin(), s.end(), '\x0D'), s.end());

    return s;
}
#包括
std::string removeWindowsLineEndings(std::string s)
{
s、 擦除(std::remove(s.begin()、s.end()、'\x0D')、s.end());
返回s;
}

我会直接使用
boost::replace_all
(boost字符串算法)。谢谢fileoffset和matthieu。我的错。。。我应该猜到(这很尴尬……我应该为此受到谴责)。