Форум сайта python.su
0
Здраствуйте. Решил “слить” двя языка (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;
}
Проблема в том, что приложение “крушится” Помогите разобратся с проблемой.
Зарание спасибо.
Офлайн
1
во-первых для нормальной связки Си и Питона нужно пользовать MS VS 7.1. иначе возможны проблемы.
во-вторых, скрипт можно прочесть в строку и запустить на выполнение из строки, а не из файла. только функция нужна PyRun_SimpleString.
но на самом деле это очень примитивный уровень связки.
Офлайн
14
Попытка ткнуть пальцем в небо, конечно…
Думаю, беда в PyRun_SimpleFile и неверной runtime library.
Должна быть multi-threaded dll.
Иначе происходит нестыкняк с тем, что на самом деле представляет из себя FILE*
А связывать действительно лучше не так. По личному опыту: удобней extending, а не embedding.
Офлайн
0
bialixА как еще можно связать два этих могучих языка?
но на самом деле это очень примитивный уровень связки.
Офлайн
1
Murr_vkу Лутца много на эту тему. Суть в том, что в этом простом примере подымается интерпретатор питона и в нем запускается некеий питон-скрипт, потом все останавливается.bialixА как еще можно связать два этих могучих языка?
но на самом деле это очень примитивный уровень связки.
Офлайн
14
Маленькая поправка.
Практика показала, что Си код, поднимающий интерпретатор и дергающий его - как правило признак плохой архитектуры (но есть и исключения).
Трудно пишется, еще труднее отлаживается.
Ся, вызываемые из Питона - гораздо гибче и универсальней. И этого варианта влолне достаточно.
Офлайн
0
В VS2010 тот же геморой…
bialixЧто за книга? Название в студию.
у Лутца много на эту тему.
Офлайн
6
может имеет смысл посмотреть на связку через Pyrex - http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Офлайн
17
Поддерживаю насчет pyrex - там есть возможность делать модули для python и есть генерация *.h файлов для вызова из С/С++.
Офлайн
14
Сначала, не Pyrex а Cython - первый помер.
Второе: Cython предназначен для генерации Python C Extensions. Он делает это хорошо.
Насколько понимаю, требуется обратная задача - embedding Python в С++ код.
Я много работал с обоими случаями, поверьте. Не стоит их путать.
Офлайн