【问题标题】:How to insert a python code in C++?如何在 C++ 中插入 python 代码?
【发布时间】:2017-05-15 11:21:54
【问题描述】:

我正在尝试在 c++ 中嵌入代码 python。我有这个 python 代码:

#include <Python.h>

int main(int arg)
{
    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PyRun_SimpleString("from time import time,ctime\n"
                       "print 'Today is',ctime(time())\0");
    Py_Finalize();
    return 0;
}

但我想要的是这样的:

包括

int main(int arg)
{
    Py_SetProgramName(argv[0]);
    int a = 5;
    Py_Initialize();
    PyRun_SimpleString("a = " + a);
    Py_Finalize();
    return 0;
}

但它不起作用。我的意思是我想用 python 来显示变量 a 的值。 谢谢你:)

【问题讨论】:

  • 查找 sprintf()

标签: python c++ python-2.7 c++11 c++14


【解决方案1】:

您可以使用std::to_stringint 转换为字符串,然后使用std::string::c_str 在函数调用期间将临时const char* 获取到内部数据:

PyRun_SimpleString(("a = " + std::to_string(a)).c_str());

【讨论】:

  • 与任何sprintf 建议相比,std::to_string 是一个 C++ 解决方案
【解决方案2】:

您必须在 C 代码中使用正确的 C 语法;在 C 中,"a = "+a 连接字符串(正如您可能假设的那样),而是计算一个无用的指针,该指针指向常量字符串 "a = " 的开头后面的 a 字节。 a5,在那个地方没有任何用处。

在 C 中连接字符串并不是那么简单。您需要处理为目标等准备内存;将数字转换为字符串也是如此。例如:
char buffer[30];
sprintf(buffer,"a = %d\n",a);

然后
PyRun_SimpleString(buffer);

【讨论】:

  • 好的,那么“正确的语法”是什么?我想用 , a 而不是 +a ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多