如何运行使用 PyRun 读入 std::string 的 python 文件

2024-04-08

我正在将 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(使用前将#替换为@)

如何运行使用 PyRun 读入 std::string 的 python 文件 的相关文章

随机推荐

  • 使用 Mailkit 或 mimekit 向多个收件人发送一封电子邮件

    请不要将其标记为重复问题 因为该解决方案适用于邮件消息 而不适用于 mailkit 我正在尝试向多个地址发送电子邮件 我尝试使用下面的代码 但我还没有尝试使用循环 var message new MimeMessage message Fr
  • 如何全局禁用 Pylint 特定错误消息?

    我使用 Sublime Text 编辑器和 Pylint 作为 Python 代码解析器 它工作正常 但是每当我定义变量时 我都会收到以下错误消息 C0103 错误 常量名称无效 I read 在这个主题中 https stackoverf
  • 在 Visual Studio 2012 中导入现有源文件

    我想将教程的源代码添加到现有项目中 并且希望将文件从下载到的桌面上的临时文件复制到项目文件夹中 在解决方案资源管理器中单击 源文件 文件夹会引导我进入 添加 gt 现有项目 菜单 然后我可以添加源文件 但是 它不会复制到项目文件夹中 而是保
  • 如何将 Vec 转换为 C 友好的 *mut T?

    我有一个 Rust 库 它返回u8通过 FFI 将数组传递给 C 调用者 该库还可以在客户端使用完数组后处理删除数组的问题 库没有状态 因此客户端需要拥有该数组 直到将其传回库进行释放 Using box from raw and boxe
  • Erlang 生成问题

    我在 erlang 中遇到了 spawn 问题 似乎进程在一段时间后就死掉了 这是简单的代码 module simple export server 1 client 1 owner 1 spawn n 2 start 1 main 1 s
  • javax.xml.bind.JAXBException:不包含 ObjectFactory.class o jaxb.in​​dex

    我有一个 Java Spring Web 应用程序 需要将其用作 SOAP 客户端 我正在使用 Maven 并且有一个包含自定义代码的主模块 WAR 和一个包含 WSDL 我有两个 WSDL 生成的类的子模块 JAR 依赖项 正如您在标题中
  • LsaOpenPolicy 在我的代码中抛出异常。为什么?

    我从新闻组帖子中得到了以下代码 奇怪的是 它在 Delphi 2010 中对我不起作用 LsaOpenPolicy 函数调用时抛出异常 function AddLogonAsAService ID pchar boolean const R
  • 是否可以将批量搜索请求发送到 Google 自定义搜索 API?

    我的应用程序超出了 Google 自定义搜索 API 的限制 在寻求优化我的搜索调用时 我想知道是否有办法批量发送到 API 的搜索请求 我有一些页面 每个用户搜索都会发出多个请求 并且希望将它们批处理为一个 API 调用 我环顾四周 但没
  • 在 React 中的按键上应用按钮“活动”样式

    我在 React Redux 中有一个鼓应用程序 它的功能齐全 但我希望能够在相应的按键按下时应用活动按钮样式 就像我物理单击按钮时一样 就目前情况而言 单击按钮会进行转换 但键入相应的键只会播放音频文件 而不会真正链接到按钮 有没有办法在
  • 如何以 RESTful 方式建模 CANCEL 操作?

    我们目前正在从我们的整体服务中争取较小的服务 我们的域与票务系统非常相似 我们决定开始域名的取消流程 我们的取消服务有一个简单的端点 Cancel 它接收票证的 ID 在内部 我们检索 id 对其执行一些与取消相关的操作 并更新存储中实体的
  • 使用 jquery 将字符串与数字分割[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有类似的字符串 1 test one 2 test two 3 test three 4 test four 5 test five
  • Xcode 中出现错误“未设置视图出口。”

    我在 Xcode 中遇到问题 每次我在模拟器中运行我的应用程序时 该应用程序都会在黑屏视图中停止 并且调试器会编写以下代码 2012 07 04 11 54 08 348 myApp 661 f803 由于以下原因终止应用程序 未捕获的异常
  • Laravel 5 - 未找到 Application::shutdown() 函数,是否有其他解决方案?

    出现致命错误 在 laravel 5 中调用未定义的方法 Illuminate Foundation Application shutdown 代码示例 App shutdown function do somthing 使用 Larave
  • 在进行 Rails asset:precompile 时如何运行一些初始化程序?

    背景 我有一个应用程序 最近更新到了 Rails 3 2 1 从 Rails 3 0 x 并重构了 JS 和 CSS 资源以利用新的资源管道 该应用程序托管在具有 Celadon Cedar 堆栈的 Heroku 上 应用程序配置 我将应用
  • EF4 仅代码映射继承

    我有以下型号 我想要ShiftRequest and MissionRequest在数据库中有一个表 public class RequestBase public int Id get set public DateTime Reques
  • golang:如何卸载已加载的“go插件”1.8

    go1 8开始 go支持创建和加载插件 但不支持卸载插件 插件是在运行时加载的模块 是否可以卸载模块 如果无法卸载模块 那么在应用程序级别卸载插件 使其不可用但仍在内存中的最佳方法是什么 Go 不支持卸载插件 但您可以按照您的建议禁用它 通
  • 如何将我的代理凭据传递给 SharePoint 客户端上下文对象...? (SharePoint 客户端对象模型)

    我正在编写一个使用客户端对象模型访问 SharePoint 网站的应用程序 并且我位于代理服务器后面 我打电话 ClientContext ExecuteQuery 并收到以下错误消息 远程服务器返回错误 407 需要代理身份验证 如何将我
  • 从特定键的嵌套数组行收集所有值[重复]

    这个问题在这里已经有答案了 需要创建一个列表 其中包含存储在特定键 product id 的数组行中的所有值 目前 对 bestsellers 变量执行 print r 会生成以下数组 Array 0 gt stdClass Object
  • 在 Linux 上调用 Python IDLE

    我正在尝试搭建Python开发环境 我在 Linux Mint 14 上运行 Python 2 7 3 我下载了 IDLE 并安装了它 它干净安装并且 Python 运行得很好 那么如何调用IDLE呢 我的路径中没有任何 IDLE whic
  • 如何运行使用 PyRun 读入 std::string 的 python 文件

    我正在将 Python 嵌入到我的 C 程序中 并且非常有效地使用了 PyRun SimpleString 但现在遇到了麻烦 我所做的是将 python py 文件加载到 std string 但现在运行它时遇到问题 PyRun Simpl