Используйте скомпилированную программу в качестве входных данных в моем программном обеспечении Python

Я видел разные программы, использующие скомпилированные программы в качестве "модуля"; Примером может служить wifite, который использует пакет aircrack.

Точно так же мне нужно реализовать tshark внутри моей программы на python, но без необходимости прорабатывать исходный код (главным образом потому, что я хотел бы, чтобы программное обеспечение было модульным и оставляло tshark простой зависимостью).

Какой лучший способ сделать это? Я бы избегал простого вызова программы, поскольку я не чувствую, что она очень питонна.

2 ответа

Решение

В общем смысле общий API, предоставляемый стандартными программами UNIX, состоит из:

  • Вектор аргумента, с которого запускается эта программа (массив строк C, созданный оболочкой или переданный непосредственно subprocess модуль).
  • Файловые дескрипторы передаются как FD 0, 1 и 2 (stdin, stdout и stderr), когда этот процесс запускается (могут использоваться другие, но только эти три являются частью стандартного API).
  • Набор переменных среды, унаследованных этой программой при запуске.
  • Различные другие унаследованные состояния процесса, такие как текущий рабочий каталог программы.

Традиционно программы UNIX связываются друг с другом с помощью этих средств - чтение ввода из stdin (если в командной строке не указано иное), запись в stdout, запись в stderr и т. Д.

Некоторые программы могут предлагать библиотечные интерфейсы или интерфейсы на основе сокетов, но они доступны только в каждом конкретном случае.

Если вы пытаетесь взаимодействовать с программным обеспечением, написанным на C, которое предоставляет интерфейс библиотеки, см. ctypes модуль стандартной библиотеки.

Для вашей цели вы можете использовать одну из существующих оболочек вокруг tshark, например https://github.com/KimiNewt/pyshark.

В другом случае вам, вероятно, потребуется перекомпилировать инструмент как библиотеку, а затем предоставить привязки для его использования в Python. Подробнее об этом в документации.

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