Как получить вывод pintf из файла cdll .so в Python

Я использую модуль cdll для загрузки библиотеки C в Python, которая выглядит примерно так:

from ctypes import cdll 

LIBRARY = "./foo.so"

cdll.LoadLibrary(LIBRARY.encode())

И в этой библиотеке его функция будет печатать некоторую информацию на выходе (я думаю, это стандартный вывод).

Значит проблема в 'как получить вывод из библиотеки C?' И я могу использовать его как строку Python

Сначала вам нужно захватить возвращаемое значение из LoadLibrary, чего вы не делаете, а затем вы вызываете функцию как метод для этого значения. Нужно ли передавать функции какие-либо параметры? Кстати, он, вероятно, вернет объект в байтах.

cdarke 01.05.2018 13:18

Да, вы правы, я пишу лишь для примера. В своем сценарии я делаю все, что вы сказали. Но я хочу получить вывод функции printf () в библиотеке C. Не только код возврата «1». Другими словами, код библиотеки C не возвращает то, что я хочу. Он просто распечатывает его. Итак, мне нужно получить результат.

Choogle 01.05.2018 14:49

Пожалуйста, опубликуйте свой ожидаемый результат. Ваш фактический результат. И ваш код его создает. Догадки следует игнорировать. «вывод из библиотеки C» не имеет особого смысла.

CristiFati 01.05.2018 17:14

Я никогда не пробовал это с C DLL, но теоретически DLL будет использовать тот же stdout, что и Python, потому что он выполняется в том же процессе. Таким образом, вы могли бы использовать sys.stdout = StringIO() перед вызовами, а затем использовать методы StringIO для получения текста. Не уверен, что это сработает, но, возможно, стоит попробовать.

cdarke 01.05.2018 23:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
71
0

Другие вопросы по теме