在C+;中使用嵌入式python运行文件时创建类实例+;
我试图在从嵌入式python调用脚本时创建python类的实例-在C+;中使用嵌入式python运行文件时创建类实例+;,python,c++,Python,C++,我试图在从嵌入式python调用脚本时创建python类的实例- Py_Initialize(); object main_module = import("__main__"); object main_namespace = main_module.attr("__dict__"); std::string fileName = "D:/Dog.py"; const char *f = fileName.c_str(); PyObject *obj = Py_BuildValue("s
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
std::string fileName = "D:/Dog.py";
const char *f = fileName.c_str();
PyObject *obj = Py_BuildValue("s", "D:/dog.py");
FILE *file = _Py_fopen(f, "r+");
if (file != NULL)
{
PyObject* result = PyRun_File(file, f, Py_file_input, main_namespace.ptr(), main_namespace.ptr());
}
我的Dog.py文件如下所示-
import sys
import os
import Cat
class Dog:
def __init__(self):
print("I am a dog!")
self.cat = Cat()
def main():
""" main function """
print("\nStart...")
dog = Dog()
return 0
#### --Main-- ####
if __name__ == "__main__":
main()
我的Cat.py文件如下所示-
import sys
import os
class Cat:
def __init__(self):
print("I am a cat!")
def main():
""" main function """
print("\nStart...")
cat = Cat()
return 0
#### --Main-- ####
if __name__ == "__main__":
main()
这段代码因一些python错误而崩溃。如果Dog类没有实例化Cat,那么代码将成功执行。我应该怎么做才能在没有任何错误的情况下实例化Cat类?您可以导入一个python文件并使用以下代码调用一个方法:
#include <Python.h>
int main() {
Py_SetProgramName(L"main");
// Py_SetPythonHome(L"");
// Py_SetPath(L"");
// Py_IgnoreEnvironmentFlag = 1;
// Py_DontWriteBytecodeFlag = 1;
// Py_NoUserSiteDirectory = 1;
Py_IsolatedFlag = 1;
// Py_NoSiteFlag = 1;
Py_Initialize();
PyObject * dog_module = PyImport_ImportModule("Dog");
PyObject * dog = PyObject_CallMethod(dog_module, "Dog", NULL);
}
#包括
int main(){
Py_SetProgramName(L“主”);
//Py_SetPythonHome(左“);
//Py_设置路径(L“);
//Py_IgnoreEnvironmentFlag=1;
//Py_DontWriteBytecodeFlag=1;
//Py_NoUserSiteDirectory=1;
Py_隔离滞后=1;
//Py_NoSiteFlag=1;
Py_初始化();
PyObject*dog_模块=PyImport_ImportModule(“dog”);
PyObject*dog=PyObject\u调用方法(dog\u模块,“dog”,NULL);
}
如果需要,使用Py_SetPythonHome
和Py_SetPath
。
取消对嵌入式环境中可能需要的标志的注释
- 文件
- 文件
- 和的文档
Dog.py
中,不导入Cat.py
。Dog
类如何知道在哪里可以找到Cat
类?(撇开为什么狗首先要实例化猫的问题不谈…@Seb抱歉,忘了添加它,但问题仍然存在there@Scheff定位Cat.py不是问题,因为如果我注释行“self.Cat=Cat()”,代码工作正常。我还将D:\添加到系统路径中,例如-std::ostringstream path;你的意思是:<代码>从CAT导入CAT//CODE?也许是个愚蠢的问题,但是当你从Python(例如,代码> Python Fo.Py <代码>)执行它时,脚本是否成功运行,而不是通过C++运行它?