【发布时间】:2013-07-02 16:09:03
【问题描述】:
我正在尝试使用Python.h 在 C++ 程序中运行 Python 脚本。因为这个 C++ 程序可以安装 (make install) 到 /usr/bin,所以它需要能够在它自己的目录(如果它没有安装)或 PATH 环境变量的目录之一中找到 Python 脚本。
我已经尝试过:
PyObject *pName = PyString_FromString(scriptName); // scriptName is "file.py" as a char*
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
PyObject *pModule = PyImport_Import(name); // not working because absolute path only
//since Python 2.7 ?
和
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
PyObject *pModule = PyImport_ImportModuleEx(scriptName, NULL, NULL, NULL);
但是在这个调用之后,两者都给我留下了pModule == NULL,但是如果我从它自己的目录运行 C++ 模块,它就可以工作。
非常感谢您的帮助
【问题讨论】:
-
几个问题:1)应用程序会从包含python脚本的目录运行吗? 2)你有没有试过在Py_Initialize之前调用PySys_SetArgvEx,并设置应用路径?
-
1) 当然,
make将 C++ 可执行文件放在 Python 脚本所在的同一目录中。make install将 C++ 可执行文件和 Python 脚本复制到usr/bin(或用户想要安装它们的任何位置)。 2) 我没有,主要是因为这部分 C++ 程序离main很远,因此也离原来的argc和argv变量很远。我需要这样做来设置应用程序路径吗?