Различия между модулем подпроцесса, посланником, 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 и поддерживает окна.