Найти - Пользователи
Полная версия: [Python/C] Запуск интерпретатора python'a в Си и перехват данных
Начало » Python для новичков » [Python/C] Запуск интерпретатора python'a в Си и перехват данных
1
Corban_Dallas
Здравствуйте!

В 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, но из за плохо знания языка очень много из неё не понятно.
py.user.next
пример перенаправляния 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
Corban_Dallas
py.user.next
Большое спасибо! Конечно, не очень хочется выводить всё во внешний файл, что бы потом сразу обратно его считывать, но теперь есть от чего отталкиваться.
Shaman
Посмотрите хелп к функциям Py{тип питона}_As{тип C}.
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