получить и сохранить функцию stdout printf () из c / c ++ в python - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть программа OpenCL с некоторой функцией printf (), и она запускается через pyOpenCL. Я хочу сохранить стандартный вывод в переменной. Мой реальный код для достижения этой цели:

from io import StringIO # Python3 use: from io import StringIO
import sys
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
# fpga_conv = conv2d.Matmul(H, fpga_mtx, s_mask_ref.astype(np.int32), 1, 0)
# Call to the OpenCL program via pyOpenCL
fpga_ref = conv2d.Matmul(H_ans, fpga_mtx, s_mask_ans.astype(np.int32), 1, 1, (H_h, H_w))
sys.stdout = old_stdout
string = mystdout.getvalue() # Store stdout in a var

Но только перехватывает стандартный вывод python print () . Можно ли получить весь стандартный вывод? Единственный найденный мной способ - запустить скрипт в bash с инструкцией python module.py &> "ref.txt", которая хранит стандартный вывод printf () в файле ref.txt. Мне нужно запустить программу через IDE (в данном случае Spyder), а не в терминале bash. Любой sugesstion или трюк? Thx!

1 Ответ

0 голосов
/ 17 апреля 2020

Наконец-то я нашел решение с помощью wurlitzer module -> https://github.com/minrk/wurlitzer

Работает отлично и требует только 2 или 3 строки кода. Пример моего вопроса (с StringIO):

out = StringIO()
with pipes(stdout=out, stderr=STDOUT):
    w_fpga_ref = conv2d.Matmul(w_H_ans, fpga_mtx, w_s_mask_ans.astype(np.int32), 1, 1, (w_H_h, w_H_w))
x = out.getvalue()
...