如何在 C++ 中嵌入设置标志的 python 代码

How to embed a python code which sets flags in C++

我找不到在 https://docs.python.org/3.5/extending/embedding.html.

处嵌入在 C++ 代码中设置标志的 python 代码的方法

我有这个 python 代码 test.py:

import tensorflow as tf

# Settings
flags = tf.app.flags
FLAGS = flags.FLAGS

#core params..
flags.DEFINE_string('model', 'gcn', 'model name')
flags.DEFINE_float('learning_rate', 0.01, 'initial learning rate')
flags.DEFINE_string("model_size", "small", "define model size")


def main(argv=None):
    print("Flags Set")
    print(FLAGS.learning_rate)

if __name__ == '__main__':
    tf.app.run()

当我执行命令时:

python -m test --learning_rate 0.0002

输出为:

Flags Set
0.0002

如何在 C++ 中嵌入上述 python 代码并调用它?

你有两个选择,

1. 只需使用 system(),

执行 python 脚本
system("python -m /path/to/test.py  --learning_rate 0.0002");

2.使用Python/CApi如下,

#include <python3.6/Python.h>
#include<iostream>
using namespace std;

int main(int argc, char *argv[])
{
    FILE* file;
    wchar_t *program = Py_DecodeLocale(argv[0], NULL);
    wchar_t** _argv;
    for(int i=0; i<argc; i++){
        wchar_t *arg = Py_DecodeLocale(argv[i], NULL);
        _argv[i] = arg;
    }
    Py_SetProgramName(program);
    Py_Initialize();   
    PySys_SetArgv(argc, _argv);
    file = fopen("/path/to/test.py","r");
    PyRun_SimpleFile(file, "/path/to/test.py");
    Py_Finalize();
    return 0;
}

如果您在 a.out 中获得可执行文件,您可以 运行 如下所示,

./a.out --learning_rate 0.0002

注意:- 我在 python3.6m 文件夹中有 Python.h,我使用标志 -lpython3.6m 进行编译.