Найти - Пользователи
Полная версия: Использование языка Python в С/С++, простой пример
Начало » Python для экспертов » Использование языка Python в С/С++, простой пример
1 2 3
Sergio
Здраствуйте. Решил “слить” двя языка (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;
}
Проблема в том, что приложение “крушится” Помогите разобратся с проблемой.
Зарание спасибо.
bialix
во-первых для нормальной связки Си и Питона нужно пользовать MS VS 7.1. иначе возможны проблемы.
во-вторых, скрипт можно прочесть в строку и запустить на выполнение из строки, а не из файла. только функция нужна PyRun_SimpleString.

но на самом деле это очень примитивный уровень связки.
Андрей Светлов
Попытка ткнуть пальцем в небо, конечно…
Думаю, беда в PyRun_SimpleFile и неверной runtime library.
Должна быть multi-threaded dll.
Иначе происходит нестыкняк с тем, что на самом деле представляет из себя FILE*

А связывать действительно лучше не так. По личному опыту: удобней extending, а не embedding.
Murr_vk
bialix
но на самом деле это очень примитивный уровень связки.
А как еще можно связать два этих могучих языка?
bialix
Murr_vk
bialix
но на самом деле это очень примитивный уровень связки.
А как еще можно связать два этих могучих языка?
у Лутца много на эту тему. Суть в том, что в этом простом примере подымается интерпретатор питона и в нем запускается некеий питон-скрипт, потом все останавливается.

В более сложном случае Си-код подымает интерпретатор в начале работы, потом периодически дергает какие-то функции питона, а питон может дергать какие-то функции из Си. Т.е. когда используется действительно полноценная связка в обе стороны.
Андрей Светлов
Маленькая поправка.
Практика показала, что Си код, поднимающий интерпретатор и дергающий его - как правило признак плохой архитектуры (но есть и исключения).
Трудно пишется, еще труднее отлаживается.
Ся, вызываемые из Питона - гораздо гибче и универсальней. И этого варианта влолне достаточно.
solowey
В VS2010 тот же геморой…
bialix
у Лутца много на эту тему.
Что за книга? Название в студию.
truporez
может имеет смысл посмотреть на связку через Pyrex - http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
agalen
Поддерживаю насчет pyrex - там есть возможность делать модули для python и есть генерация *.h файлов для вызова из С/С++.
Андрей Светлов
Сначала, не Pyrex а Cython - первый помер.
Второе: Cython предназначен для генерации Python C Extensions. Он делает это хорошо.
Насколько понимаю, требуется обратная задача - embedding Python в С++ код.
Я много работал с обоими случаями, поверьте. Не стоит их путать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB