4

私はPython/C APIをいじっていて、このコードがあります:

#include <Python.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    //Initialize Python
    Py_Initialize();

    //Run file
    FILE *fp = fopen("Test.py", "r");

    PyRun_SimpleFile(fp,"Test.py");

    fclose(fp);

    //Run Python code
    PyRun_SimpleString("print(__NAME__)");
    PyRun_SimpleString("print(__DESC__)");
    PyRun_SimpleString("print(__SKIN__)");
    PyRun_SimpleString("onEnable()");

    //Finalize Python
    Py_Finalize();

    return EXIT_SUCCESS;
}

Test.py には次のものが含まれます。

__NAME__ = "Frank"
__DESC__ = "I am a test script"
__SKIN__ = "random image"

def onEnable():
    print("In Func")

ご想像のとおり、c プログラムをコンパイルして実行すると、次のようになります。

フランク

私はテストスクリプトです

ランダム画像

機能中

ただし、PyRun_SimpleString("print(blah)") を使用するのではなく、インタープリターから Python 文字列を取得し、それらを C 文字列に貼り付けてから出力する方法が必要です。

例えば:

char *__NAME__;
__NAME__ = Py_GetObject("__NAME__")

これは可能ですか?

ご協力いただきありがとうございます。

4

1 に答える 1

5

PyString_AsStringを使用する必要があります。次のようになると思います。

PyObject* module = PyImport_AddModule("__main__");
PyObject* o = PyObject_GetAttrString(module , "__NAME__");
if (PyString_Check(o))
{
    const char* name = PyString_AsString(o);
    // don't delete or modify "name"!
}
Py_DECREF(o);
于 2012-10-26T14:22:57.057 に答える