Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 22, 2007 23:44:28

Sergio
От:
Зарегистрирован: 2007-06-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

Здраствуйте. Решил “слить” двя языка (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;
}
Проблема в том, что приложение “крушится” Помогите разобратся с проблемой.
Зарание спасибо.



Офлайн

#2 Июнь 23, 2007 00:29:19

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

во-первых для нормальной связки Си и Питона нужно пользовать MS VS 7.1. иначе возможны проблемы.
во-вторых, скрипт можно прочесть в строку и запустить на выполнение из строки, а не из файла. только функция нужна PyRun_SimpleString.

но на самом деле это очень примитивный уровень связки.



Офлайн

#3 Июнь 23, 2007 11:13:18

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

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

А связывать действительно лучше не так. По личному опыту: удобней extending, а не embedding.



Офлайн

#4 Июнь 26, 2007 01:19:44

Murr_vk
От:
Зарегистрирован: 2007-05-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

bialix
но на самом деле это очень примитивный уровень связки.
А как еще можно связать два этих могучих языка?



Офлайн

#5 Июнь 26, 2007 07:03:20

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

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

В более сложном случае Си-код подымает интерпретатор в начале работы, потом периодически дергает какие-то функции питона, а питон может дергать какие-то функции из Си. Т.е. когда используется действительно полноценная связка в обе стороны.



Офлайн

#6 Июнь 26, 2007 07:43:33

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

Маленькая поправка.
Практика показала, что Си код, поднимающий интерпретатор и дергающий его - как правило признак плохой архитектуры (но есть и исключения).
Трудно пишется, еще труднее отлаживается.
Ся, вызываемые из Питона - гораздо гибче и универсальней. И этого варианта влолне достаточно.



Офлайн

#7 Апрель 1, 2011 10:38:28

solowey
От:
Зарегистрирован: 2011-03-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

В VS2010 тот же геморой…

bialix
у Лутца много на эту тему.
Что за книга? Название в студию.



Офлайн

#8 Апрель 1, 2011 12:18:40

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

может имеет смысл посмотреть на связку через Pyrex - http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/



Офлайн

#9 Апрель 1, 2011 16:48:16

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

Поддерживаю насчет pyrex - там есть возможность делать модули для python и есть генерация *.h файлов для вызова из С/С++.



Офлайн

#10 Апрель 1, 2011 17:19:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

Сначала, не Pyrex а Cython - первый помер.
Второе: Cython предназначен для генерации Python C Extensions. Он делает это хорошо.
Насколько понимаю, требуется обратная задача - embedding Python в С++ код.
Я много работал с обоими случаями, поверьте. Не стоит их путать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version