Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2014 14:42:08

Corban_Dallas
Зарегистрирован: 2014-02-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

[Python/C] Запуск интерпретатора python'a в Си и перехват данных

Здравствуйте!

В python я новичек (да и в Си не далеко ушел). Постараюсь быть максимально кратким и выразить проблему наиболее четко. Некоторое время не мог решить куда лучше задать этот вопрос, на форум по Си или Python. Решил что всё таки сюда, так как Python/C API является частью документации к Python.
Необходимо встроить в GUI написанное на Cи (Qt) интерпретатор python'a.
Написание графического функционала консоли труда не составило. Сложностей с запуском и обращением к интерперетатору python в Си нет, там всё предельно просто. В ниже приведённом коде, следуя документации Python/C API, запускается интерпретатор Python в программе написанной на Си и ему посылвается простая команда “a = 4 + 4”.

#include <Python.h>
int main(int argc, char *argv[])
{
    Py_Initialize();
    PyRun_SimpleString("a = 4+4");
    Py_Finalize();
    return 0;
}
Однако встала обратная проблема. Не могу понять как “транслировать” всю информацию с выхода интерпретатора на написанную на Cи консоль. Т.е. посылать команды python'y я могу, работать он вроде как будет, но происходить всё будет “за кулисами”. А мне необходимо что бы все результаты и ошибки выводились записивылись в некие промежуточные переменные (напиремр char или QString) и затем выводились на консоль, и выглядело всё так, как если запускать python из обычной командной сроки.
Пытаюсь найти решение в документации Python/C API, но из за плохо знания языка очень много из неё не понятно.

Отредактировано Corban_Dallas (Фев. 21, 2014 14:43:14)

Офлайн

#2 Фев. 21, 2014 19:00:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

[Python/C] Запуск интерпретатора python'a в Си и перехват данных

пример перенаправляния stderr программы в файл и его восстановление

[guest@localhost embed_stderr]$ ls
embed_stderr.c make.sh
[guest@localhost embed_stderr]$ ./make.sh
File "<string>", line 1
b =
^
SyntaxError: invalid syntax
[guest@localhost embed_stderr]$ cat stderr.txt
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'prin' is not defined
File "<string>", line 1
a =
^
SyntaxError: invalid syntax
[guest@localhost embed_stderr]$

под Windows там, по-моему, файл “con” нужно открывать, чтобы восстановить stderr



Прикреплённый файлы:
attachment embed_stderr.tar (20,0 KБ)

Офлайн

#3 Фев. 22, 2014 07:13:47

Corban_Dallas
Зарегистрирован: 2014-02-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

[Python/C] Запуск интерпретатора python'a в Си и перехват данных

py.user.next
Большое спасибо! Конечно, не очень хочется выводить всё во внешний файл, что бы потом сразу обратно его считывать, но теперь есть от чего отталкиваться.

Офлайн

#4 Фев. 22, 2014 07:26:13

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

[Python/C] Запуск интерпретатора python'a в Си и перехват данных

Посмотрите хелп к функциям Py{тип питона}_As{тип C}.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version