大家好,最近项目需要用调用python脚本,在过去一般都是把 python 调用c++ 的扩展库.扩展python 的功能.
这里想使用c++程序调用执行python中定义的函数,应该也是可行的.
1配置下cmake
cmake_minimum_required(VERSION 2.8)
project(python_test)
set(CMAKE_BUILD_TYPE Debug)
find_package(Boost COMPONENTS thread serialization python REQUIRED)
include_directories(${Boost_INCLUDE_DIR}
/usr/include/python2.7)
add_executable(python_cpp
python_main.cc)
target_link_libraries(python_cpp
${Boost_LIBRARIES}
/usr/lib/x86_64-linux-gnu/libboost_python-py27.so
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libpython2.7.so
)
2 c++ 部分
#include <iostream>
#include <boost/python.hpp>
using namespace std;
using namespace boost::python;
int main()
{
Py_Initialize();
if(!Py_IsInitialized())
{
std::cout <<"1" <<std::endl;
return -1;
}
PyRun_SimpleString("import sys");
int argc = 1;
char *argv[1];
argv[0] = "/home/hunkyu/xxxxx/test.py";
PySys_SetArgv(argc, argv);
if(PyRun_SimpleString("execfile('/home/hunkyu/xxxxx/test.py')") == NULL)
{
std::cout <<"2" <<std::endl;
return -1;
}
Py_Finalize();
return 0;
}
3 python 脚本
这里随便写个test.py
import sys
def test():
for arg in sys.argv:
print arg
if __name__=='__main__':
test()
写完了, 记得转载,来个链接偶!!!!