Различия между модулем подпроцесса, посланником, sarge и pexpect?
Я думаю о создании программы, которая должна будет отправлять входные данные и получать выходные данные из различных инструментов aircrack-ng suite. Я знаю пару модулей python, таких как подпроцесс, посланник, sarge и pexpect, которые обеспечивали бы необходимую функциональность. Может ли кто-нибудь посоветовать, что я должен использовать или не использовать, тем более, что я новичок в python.
Спасибо
Ответы
Ответ 1
Как разработчик sarge
, я могу сказать вам, что его цели в целом похожи на envoy
(с точки зрения удобства использования над subprocess
), и есть (IMO) больше функциональности в sarge
с по отношению к:
- Поддержка кросс-платформенного синтаксиса bash (например, использование
&&
, ||
, &
в командных строках)
- Лучшая поддержка для захвата
subprocess
выходных потоков и работы с ними асинхронно
- Дополнительная документация, особенно о внутренних и периферийных проблемах, таких как threading + forking в контексте использования подпроцесса
- Поддержка предотвращения атак с использованием оболочки
Конечно, YMMV, но вы можете проверить документы, они достаточно полные.
Ответ 2
subprocess - это стандартный библиотечный модуль, поэтому он будет доступен с установкой python. Но он имеет репутацию сложной в использовании, так как api не интуитивно понятен.
envoy - это сторонний модуль, который обтекает подпроцесс. Он был написан как простая в использовании альтернатива подпроцессу. Автор посланника Кеннет Рейц известен своей философией Python for Humans.
Я не знаком с двумя другими.
Ответ 3
pexpect
В 2015 году pexpect не работает с окнами. По слухам, добавить "экспериментальную" поддержку в следующей версии, но это был слух в течение длительного времени (я не задерживаю дыхание).
Написав много приложений, использующих pexpect (и любя их), мне жаль, потому что одна из вещей, которые мне нравятся в python (это кросс-платформа), неверна для моих приложений.
Если вы планируете когда-либо добавлять поддержку Windows, на данный момент избегайте pexpect.
посланник
Не так много активности за последний год. И несколько коммитов (всего 12) с 2012 года. Не очень перспективно для своего будущего.
Внутри он использует shlex таким образом, который несовместим с путями окон (команды должны использовать '/' not '\' для разделителей каталогов). Обходной путь (при использовании pathlib) заключается в вызове as_posix() объектов пути перед передачей их в виде команд. См. этот ответ.
Получение доступа к внутренним потокам (т.е. я хочу, чтобы синтаксический анализ вывода имел некоторые обновления полос прокрутки), представляется возможным, но не документирован.
сарге
Работает над готовыми окнами и имеет метод expect(), который должен обеспечивать функциональность, похожую на pexpect (позволяющую мне обновлять полосу прокрутки). Недавняя активность, но она размещена на gitlab и bitbucket (очень запутанный).
Личный вывод
Я перехожу от pexpect к sarge для дальнейшего развития. Кажется, предоставить аналогичный набор функций для pexpect и поддерживает окна.