Форум сайта python.su
Здраствуйте. Решил “слить” двя языка (Python и С++).Вот простой пример который нарыл в нете:
Код python(файл Test.py):
print “Hello World!”
Код С из которого и будет вызыватся “питоновский” файл:
#include “stdafx.h”
#include “D:\Python25\include\Python.h”
#pragma comment(lib,“python25.lib”)
int _tmain(int argc, _TCHAR* argv)
{
FILE *fp;
Py_Initialize();
fp = fopen(“Test.py”, “r”);
if(fp)
{
PyRun_SimpleFile(fp, “Test.py”);
fclose(fp);
}
Py_Finalize();
return 0;
}
Проблема в том, что приложение “крушится” Помогите разобратся с проблемой.
Зарание спасибо.
Офлайн
во-первых для нормальной связки Си и Питона нужно пользовать MS VS 7.1. иначе возможны проблемы.
во-вторых, скрипт можно прочесть в строку и запустить на выполнение из строки, а не из файла. только функция нужна PyRun_SimpleString.
но на самом деле это очень примитивный уровень связки.
Офлайн
Попытка ткнуть пальцем в небо, конечно…
Думаю, беда в PyRun_SimpleFile и неверной runtime library.
Должна быть multi-threaded dll.
Иначе происходит нестыкняк с тем, что на самом деле представляет из себя FILE*
А связывать действительно лучше не так. По личному опыту: удобней extending, а не embedding.
Офлайн
bialixА как еще можно связать два этих могучих языка?
но на самом деле это очень примитивный уровень связки.
Офлайн
Murr_vkу Лутца много на эту тему. Суть в том, что в этом простом примере подымается интерпретатор питона и в нем запускается некеий питон-скрипт, потом все останавливается.bialixА как еще можно связать два этих могучих языка?
но на самом деле это очень примитивный уровень связки.
Офлайн
Маленькая поправка.
Практика показала, что Си код, поднимающий интерпретатор и дергающий его - как правило признак плохой архитектуры (но есть и исключения).
Трудно пишется, еще труднее отлаживается.
Ся, вызываемые из Питона - гораздо гибче и универсальней. И этого варианта влолне достаточно.
Офлайн
В VS2010 тот же геморой…
bialixЧто за книга? Название в студию.
у Лутца много на эту тему.
Офлайн
может имеет смысл посмотреть на связку через Pyrex - http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Офлайн
Поддерживаю насчет pyrex - там есть возможность делать модули для python и есть генерация *.h файлов для вызова из С/С++.
Офлайн
Сначала, не Pyrex а Cython - первый помер.
Второе: Cython предназначен для генерации Python C Extensions. Он делает это хорошо.
Насколько понимаю, требуется обратная задача - embedding Python в С++ код.
Я много работал с обоими случаями, поверьте. Не стоит их путать.
Офлайн