小编leo*_*vlt的帖子

通过Python脚本调用C++函数

我有一个场景,我在C++类中有一些函数,我希望能够使用python脚本调用它们.假设我有一个功能

void greet(_msg);
    std::cout >> _msg >> std::endl;
Run Code Online (Sandbox Code Playgroud)

我希望能够通过自定义Python调用来调用它并将参数传递给它,例如使用

saySomething("Hello")
Run Code Online (Sandbox Code Playgroud)

作为.py文件,我希望它调用greet函数并传递"Hello"作为参数.

我知道这是一个经过深入讨论的主题,我已经完成了在C++中嵌入python的研究,我已经设法使用标准的Python/C API从python脚本读取值并在Python中运行一个函数来自C++并将参数传递给它,但我似乎无法理解如何实现这一特定结果.

我已经看过ctypes和各种包装库,例如boost:python或swig,但我似乎无法理解他们可以帮助我实现我想要的程度.

c++ python qt word-wrap boost-python

7
推荐指数
1
解决办法
6341
查看次数

基本的boost:pyton程序中未定义的参考

我想开始使用boost:python将python嵌入我的C ++程序中,但是我已经遇到了以下简单代码的问题:

#include <boost/python.hpp> //boost libraries
#include <Python.h> //python libraries

using namespace boost::python;

int main()
{
    Py_Initialize();

    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我只是启动解释器并导入主模块,但是编译器已经遇到了问题:

/home/i7941878/Code/pythonTest/main.cpp:-1: error: undefined reference to `boost::python::detail::str_base::str_base(char const*)'

/home/i7941878/Code/pythonTest/main.cpp:-1: error: undefined reference to `boost::python::import(boost::python::str)'

/home/i7941878/Code/pythonTest/main.cpp:-1: error: undefined reference to `boost::python::api::getattr(boost::python::api::object const&, char const*)'
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会出现这些错误。我很确定boost:python是正确构建的。

有人能启发我吗?

我正在使用QT Creator进行构建和编译。如果我使用G ++进行编译,-I/usr/include -I/usr/include/python2.6 main.cpp则会得到:

/tmp/ccI8x97b.o: In function `main':
main.cpp:(.text+0xc): undefined reference to `Py_Initialize'
main.cpp:(.text+0x30): undefined reference to `boost::python::import(boost::python::str)'
/tmp/ccI8x97b.o: In function `boost::python::api::object::object()':
main.cpp:(.text._ZN5boost6python3api6objectC2Ev[_ZN5boost6python3api6objectC5Ev]+0xd): undefined …
Run Code Online (Sandbox Code Playgroud)

c++ python embed boost boost-python

2
推荐指数
1
解决办法
3788
查看次数

从Python中的类调用多个函数,而不是每次都重复类名

我觉得这是一个非常简单的问题,但我找不到合适的答案.基本上我有一个名为simulation的类调用函数列表:

simulation.addGroup("teapotarmy")
simulation.populateGroup(20)
simulation.addNode("input",INPUT)
simulation.addNode("output",OUTPUT);
simulation.connectNodes("input","output");
simulation.manipOutputNode("output", "group.xvel");
simulation.manipInputNode("input", 1, 0.05);
Run Code Online (Sandbox Code Playgroud)

有没有办法调用这些函数而不必每次都重复类名?沿线的东西:

(thethingIwant) simulation:
    addGroup("teapotarmy")
    populateGroup(20)
    addNode("input",INPUT)
    ...
Run Code Online (Sandbox Code Playgroud)

我用其他编程语言完成了这个,但我还没有弄清楚Python中的语法.我有一个微弱的记忆,它与'with'声明有关...?提前致谢.

莱昂

python syntax class function with-statement

1
推荐指数
1
解决办法
6454
查看次数

使用浏览器查看时,创建数据存储条目会导致加密属性

我设法在python中使用google.cloud.datastore创建或修改数据存储实体,但是当我在浏览器中登录我的Cloud Platform项目并检查条目时,看起来它的所有属性都是加密的(它们看起来像"Rm9vIEJhcg=="等 - 如果我从浏览器创建它,我可以正常看到).

我正在使用服务帐户标识的json文件进行身份验证:

self.client = datastore.Client()
self.client = self.client.from_service_account_json(cert_file.json)
Run Code Online (Sandbox Code Playgroud)

服务帐户对整个项目具有"编辑"权限.将其更改为"所有者",这是我用于登录的Gmail帐户的设置,但不能解决问题.

我像这样创建实体:

with self.datastore.client.transaction():
    entity = Entity(Key("key", project="project"))
    entity["property"] = "data"
    self.datastore.client.put(entity)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用python库修改的条目可以从浏览器站点读取吗?

python google-cloud-datastore gcloud-python google-cloud-python

1
推荐指数
1
解决办法
497
查看次数