Существуют разные варианты использования для обоих.То, что pexpect делает, что не делает Fabric, - это сохранение состояния.Каждая команда api Fabric (например, run / sudo) является отдельной командой.Поэтому, если вы сделаете:
run("cd project_dir && workon project")
run("make")
Это не будет в этом каталоге и не будет в virtualenv.Хотя в Fabric теперь есть контекстные менеджеры для cd (), они более или менее предваряют каждый запуск с помощью cd.
В схеме вещей это мало влияет на работу большинства проектов, ипо существу незамеченным.Однако для некоторых нужд вы можете использовать pexpect для управления этим состоянием, для нескольких sudos или для какого-либо интерактивного задания, которое нельзя автоматизировать с помощью флагов.
Все это, хотя и не является недостатком для Fabric, поскольку, будучи только Python, вы более чем способны включать pexpect-код в задачи Fabric.
Хотя во всех других отношениях Fabricпо сути, управляет всей тяжелой работой удаленных соединений и выполнением команд лучше, чем если бы вы писали код с нуля с помощью pexpect.
Обновление Мне сообщили о проекте, который работаетс Fabric и pexepect вы можете увидеть больше об этом ответе на вопрос