C/C++でpythonスクリプトファイルの実行を呼び出す


先日は仕事の都合で、既存の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
# !/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);

それでいい