【问题标题】:How to run a Python function from a Qt C++ project?如何从 Qt C++ 项目运行 Python 函数?
【发布时间】:2018-03-13 12:37:01
【问题描述】:

我遵循了一些教程和建议,我什至使用PyRun_SimpleString 运行了一个没有问题的函数。 我有一个名为 tomograph.py 的文件,其中包含我想要执行的 makeFiles(path,alpha,n,l) 函数,以及我设法运行的 my_fun(x) 函数(正如我已经提到的)。

这就是我在 Qt C++ 项目中所做的事情

Py_Initialize();

PyObject* moduleString = PyString_FromString((char*)"tomograph");
PyObject* module = PyImport_Import(moduleString);

PyObject* function = PyObject_GetAttrString(module,(char*)"makeFiles");
PyObject* args = PyTuple_Pack(4,filename,alpha,n,l);

//PyRun_SimpleString("my_fun(5)");

PyObject* myResult = PyObject_CallObject(function,args);

Py_Finalize();

当我运行此代码时,我在

处遇到分段错误
PyObject* function = PyObject_GetAttrString(module,(char*)"makeFiles");

我做错了什么?

【问题讨论】:

  • 你在PyObject_GetAttrString(module,(char*)"makeFiles")中使用之前没有检查module是否有效。如果之前的呼叫失败,则可能是nullptr。在调试器中观察这一点以确定。一般来说,您应该在您的 C++ 代码中添加与此相关的检查。
  • 好的,所以我添加了一些检查,结果发现导入模块确实存在问题。我应该将 .py 文件放在哪里以确保我的应用可以找到它?

标签: python c++ qt


【解决方案1】:

PYTHONPATH 设置为工作目录并将.py 文件放在构建文件夹中应该可以解决问题:

setenv("PYTHONPATH",".",1);
Py_Initialize();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-11-25
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多