C/C++でpythonスクリプトファイルの実行を呼び出す
3302 ワード
先日は仕事の都合で、既存のpythonスクリプトファイルを実行するためにC++サービスプログラムで呼び出したいと思っていたので、この方面の材料を調べて、今まとめてみました.現在のC/C++とpythonのハイブリッドプログラミングは2つの大きなクラスに分けられている:1、pythonを使用してc/c++を呼び出して作成した拡張ライブラリ、pythonの機能を拡張する.python呼び出しc/c++2、c/c++プログラム呼び出しを使用してpythonで定義された関数を実行するなど、しばらくc/c++呼び出しpythonと呼ぶ.本稿ではc/c++呼び出しに対してpythonを実行する一方で、正しくない点があれば,皆さんのご叱正を請う.現在、主流の使い方はpythonをテキスト形式のリンクライブラリとして、c/c++プログラムで定義された関数を呼び出すことである.この方面の資料は多く、本稿では後述しないが、本稿ではpythonスクリプトファイルとパラメータを完全に呼び出す方法を重点的に紹介する.機能はコマンドラインパラメータ:sampleを出力する.py
以下はテスト用のc++プログラムファイル:test.c++
コンパイル命令:
実行命令:
补充:あるネットユーザーは、第3歩は利用できないことを発见して、运行する时に间违いを报告して、私は调べて、下の文で上の第3歩の内容を交换することができます:
PyRun_SimpleString(“sys.argv[‘arg1’,’arg2’]”);
置換:
それでいい
# !/usr/bin/env python2.6
import sys
def test():
for arg in sys.argv:
print arg
if __name__=='__main__':
test()
以下はテスト用のc++プログラムファイル:test.c++
#include "python2.6/Python.h"
int main()
{
// : Python
// Python C API ,
// Python 、__main__、sys
Py_Initialize();
//
if (!Py_IsInitialized())
{
return -1;
}
// : sys
PyRun_SimpleString("import sys");
// : , :./sample.py arg1 arg2
PyRun_SimpleString("sys.argv['arg1','arg2']");
// : ,
if (PyRun_SimpleString("execfile('./sample.py')") == NULL)
{
return -1;
}
// : Python
Py_Finalize();
return 0;
}
コンパイル命令:
g++ -g -W -o test test.cpp -I /usr/include/ -L /usr/lib64/ -l python2.6
実行命令:
./test
出力:arg1
arg2
补充:あるネットユーザーは、第3歩は利用できないことを発见して、运行する时に间违いを报告して、私は调べて、下の文で上の第3歩の内容を交换することができます:
PyRun_SimpleString(“sys.argv[‘arg1’,’arg2’]”);
置換:
int argc = 2;
char *argv[2];
argv[0] = "arg1";
argv[1] = "arg2";
PySys_SetArgv(argc, argv);
それでいい