Есть программа, в которой требуется на лету выполнять скрипты. Для этого я задействовал libpython, что (поправьте если ошибаюсь) позволяет с собой таскать полноценный интерпретатор в виде дополнительный библиотеки к C++ программе, т.е. не просто API доступа к установленному в системе Python, а именно библиотека с полноценной реализацией интерпретатора. Чтобы иметь возможность парсить вывод скрипта, я перенаправляю stdout в файл, который попадает не в файловую систему а остается в памяти. Мне требуется именно вывод скрипта в stdout. Для начала Python 2.7:
#include <python2.7/Python.h>
...
Py_Initialize();
PyObject *sys = PyImport_ImportModule("sys");
PyObject *out = PyFile_FromString("python_out", "w+");
PyObject_SetAttrString(sys, "stdout", out);
FILE *output = PyFile_AsFile(out);
qDebug() << "python=" << PyRun_SimpleString("import math\n"
"print('%d' % math.sqrt(144))\n");
rewind(output);
QTextStream ts(output);
qDebug() << "ts=" << ts.readAll();
Py_Finalize();
python= 0
ts= "12\n"
При #include <python3.4m/Python.h> нет никаких PyFile_*. Как решить эту задачу для Python 3? Гугление постоянно выдает трюк с PyFile_.