Я использую модуль cdll
для загрузки библиотеки C в Python, которая выглядит примерно так:
from ctypes import cdll
LIBRARY = "./foo.so"
cdll.LoadLibrary(LIBRARY.encode())
И в этой библиотеке его функция будет печатать некоторую информацию на выходе (я думаю, это стандартный вывод).
Значит проблема в 'как получить вывод из библиотеки C?' И я могу использовать его как строку Python
Да, вы правы, я пишу лишь для примера. В своем сценарии я делаю все, что вы сказали. Но я хочу получить вывод функции printf () в библиотеке C. Не только код возврата «1». Другими словами, код библиотеки C не возвращает то, что я хочу. Он просто распечатывает его. Итак, мне нужно получить результат.
Пожалуйста, опубликуйте свой ожидаемый результат. Ваш фактический результат. И ваш код его создает. Догадки следует игнорировать. «вывод из библиотеки C» не имеет особого смысла.
Я никогда не пробовал это с C DLL, но теоретически DLL будет использовать тот же stdout
, что и Python, потому что он выполняется в том же процессе. Таким образом, вы могли бы использовать sys.stdout = StringIO()
перед вызовами, а затем использовать методы StringIO
для получения текста. Не уверен, что это сработает, но, возможно, стоит попробовать.
Сначала вам нужно захватить возвращаемое значение из
LoadLibrary
, чего вы не делаете, а затем вы вызываете функцию как метод для этого значения. Нужно ли передавать функции какие-либо параметры? Кстати, он, вероятно, вернет объект в байтах.