Python is your friend

Ja tu programmē C/C++, tad Python jābūt tavam draugam. Vēl viena komponente draudzēsies ar šo āūsku un izmantos to konfigurācijas uzdošanai. Kāpēc? Jo man negribas manipulēt ar simbolu virknēm C. Lai to dara sistēmas administratori iekš Python! :) Kā arī loģika ir tik neloģiska, ka nav vēlmes to iešūt kodā. Tad jau vieglāk paciest “hakus” konfigurācijā, nekā programmas kodā.

Un vēl viens (galvenais?) faktors: Python integrēt C/C++ kodā ir tik vienkārši, ka grēks to nedarīt. Seko šiem septiņiem soļiem un arī tu sasniegsi nirvānu!

1. Inicializējam Python interpretatoru:

Py_Initialize();

2. Izveidojam sākotnējo Python kontekstu:

PyObject *dict = PyDict_New();
PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins());

3. Pievienojam C mainīgo(s) Python kontekstam:

PyObject *o = PyString_FromString(message)
PyDict_SetItemString(dict, "message", o);
Py_DECREF(o);

4. Izpildam Python kodu, uz kuru rāda “code” rādītājs:

PyObject *res = PyRun_String(code, Py_file_input, dict, dict);
if (res == NULL) {
    /* apstrādājam kļūdu, visdrīzāk nekorekts kods */
}
Py_XDECREF(res);

5. Iegūstam rezultātu no Python mainīgā(-ajiem):

PyObject *o = PyDict_GetItemString(dict, "result");
if (o != NULL && PyString_Check(o)) {
    result = PyString_AsString(o);
}

6. Atbrīvojam Python kontekstu:

Py_DECREF(dict);

7. Atbrīvojam Python interpretatoru:

Py_Finalize();

Kā vienmēr, vairāk informācijas var atrast Python dokumentācijā: Extending and Embedding the Python Interpreter.

P.S. Ja nirvānu nesasniedzi, tad atkārto šos soļus vēlreiz.

Leave a Reply


7 × = fifty six