РЕДАКТИРОВАТЬ: Этот вопрос связан с этим: Python ctypes: как передать выходные данные строки из функции C в pandas DataFrame?
Мой вопрос заключается в том, как проанализировать текст, напечатанный вSTDOUT через printf()
в нечто полезное для Python.
Я работаю с оболочкой Python в Python3.x вокруг библиотеки C, используя ctypes.В настоящее время библиотека C выполняет запросы к базе данных.Функция, к которой я обращаюсь через ctypes, печатает строки базы данных с разделителями табуляции через printf()
:
void print_query(const char *input_file,
const char *index, const char *query_string);
, где input_file
- это путь к файлу, index
- это уже индекссгенерировано, и query_string
- строка, используемая для запроса к базе данных.
Вот код Python, который у меня сейчас есть:
from ctypes import CDLL
import ctypes
lib = CDLL(".../path/libshared.so")
lib.print_query.restype = ctypes.c_char
lib.print_query.argtypes = (ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p)
Согласно документации, https://docs.python.org/3/library/ctypes.html
ctypes.c_char
является байтовым объектом из 1 символа.Когда я пытаюсь использовать функцию lib.print_query
, функция возвращает строки через printf()
в STDOUT:
foo = lib.print_query('../file', '.../index', 'January')
выводит
2012 februari 32.610
2012 maart 33.195
2012 april 51.891
и print(foo)
возвращает b'\x02'
Я не могу "получить доступ" к тому, что было напечатано в STDOUT, и я не уверен, как перевести это в простую строку текста.Я получаю те же результаты, пытаясь
foo = io.BytesIO(lib.print_query('../file', '.../index', 'January'))
Как я могу получить доступ к этому тексту?Было бы полезно передать это в Dataframe pandas, так как это данные, разделенные табуляцией.
РЕДАКТИРОВАТЬ: я пробовал конвейер со следующими
import subprocess
proc = subprocess.Popen(lib.print_query('../file', '.../index', 'January'), stdout=subprocess.PIPE)
Вот вывод:
FileNotFoundError: [Errno 2] No such file or directory: b'\x02': b'\x02'