Используйте скомпилированную программу в качестве входных данных в моем программном обеспечении 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. Подробнее об этом в документации.