Hello.
Непонятно какие именно проблемы вылезают с несколькими модулями.
Я дополнил вашу болванку вызовами re.search(...).start() и os.path.getsize().
Обратите внимание на формат вызова: не "re.search().start()", а
"search().start()" + правильный dict от модуля. Надеюсь, поможет:
danil@desk $ cat ./test1.c
#include <stdio.h>
#include <Python.h>
int main()
{
int result;
PyObject *pstr, *pmod, *pdict;
//инициализация интерпретатора
Py_Initialize();
PyObject *main = PyImport_AddModule("__main__");
PyObject* main_dict = PyModule_GetDict( main );
pmod = PyImport_ImportModule("sys");
pdict = PyModule_GetDict(pmod);
PyObject *re_mod = PyImport_ImportModule("re");
PyObject *re_dict = PyModule_GetDict(re_mod);
PyObject *re_str;
PyObject *os_mod = PyImport_ImportModule("os");
PyObject *os_dict = PyModule_GetDict(os_mod);
PyObject *os_str;
//вычисление выражения из строки
const char* pstr_cmd = "3+4*5";
pstr = PyRun_String(pstr_cmd, Py_eval_input, pdict, pdict);
if ( pstr == NULL )
PyErr_Print();
const char* restr_cmd = "search(\"abc\", \"asabcadafag\").start()";
re_str = PyRun_String(restr_cmd, Py_eval_input, main_dict, re_dict);
if ( re_str == NULL )
PyErr_Print();
const char* osstr_cmd = "path.getsize(\"/usr/bin/python\")";
os_str = PyRun_String(osstr_cmd, Py_eval_input, main_dict, os_dict);
if ( os_str == NULL )
PyErr_Print();
//извлечение данных из объекта Python и вывод результата
if (pstr != NULL ) {
PyArg_Parse(pstr,"i",&result);
printf("%s evaluated to %i\n", pstr_cmd, result);
}
if ( re_str != NULL ) {
PyArg_Parse(re_str,"i",&result);
printf("%s evaluated to %i\n", restr_cmd, result);
}
if ( os_str != NULL ) {
PyArg_Parse(os_str,"i",&result);
printf("%s evaluated to %i\n", osstr_cmd, result);
}
//удаление созданного Python объекта, завершение интерпретатора и выход
Py_DECREF(pstr);
Py_DECREF(re_str);
Py_DECREF(os_str);
Py_Finalize();
return 0;
}
danil@desk $ gcc `python-config --cflags` `python-config --ldflags` ./test1.c
danil@desk $ ./a.out
3+4*5 evaluated to 23
search("abc", "asabcadafag").start() evaluated to 2
path.getsize("/usr/bin/python") evaluated to 6080
On Thu, 4 Jun 2009 13:07:27 +0400
Крохин Анатолий Александрович <akroh***@b*****.ru> wrote about "Re: Встраиваемый
Pyton":
>В Thu, 4 Jun 2009 11:17:44 +0400
>Крохин Анатолий Александрович <akroh***@b*****.ru> пишет:
>
>> Прочел, что Pyton легко встраивается в качестве интерпретирующего языка
>> в программы, написанные на другом языке, но нигде не нашел ни примера,
>> ни указания как это сделать.
>>
>> Может кто подскажет?
>>
>> Нужна возможность работать из некого программного продукта - обращаться
>> к интерпретатору Pyton и получать результаты его работы. А то и более
>> сложное взаимодействие.
>>
>
>
>Нашел-таки как встроить питон:
>
>8<>
>#include <stdio.h>
>#include <Python.h>
>
>int main()
>{
> int result;
> PyObject *pstr, *pmod, *pdict;
>
>//инициализация интерпретатора
> Py_Initialize();
>
> pmod = PyImport_ImportModule("sys");
> pdict = PyModule_GetDict(pmod);
>
>//вычисление выражения из строки
> pstr = PyRun_String("3+4*5",Py_eval_input,pdict,pdict);
>//извлечение данных из объекта Python и вывод результата
> PyArg_Parse(pstr,"i",&result);
> printf("%i\n",result);
>
>//удаление созданного Python объекта, завершение интерпретатора и выход
> Py_DECREF(pstr);
> Py_Finalize();
>
> return 0;
>}
>
>8<>
>Но как теперь подключить несколько модулей? Мне-то нужен re
>
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36139; Возраст листа: 2142; Участников: 1382
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/868922