我两个都用过。 Fabric 比pexpect更高级,而且在我看来要好得多。这取决于你使用它的目的,但是如果你使用它来部署和配置软件,则 Fabric 是正确的选择。
两者都有不同的用途。 Pexpect可以保留状态,而Fabric则不能。每个Fabric API命令(例如:run / sudo)都是单独的命令。因此,如果您执行以下操作:
run("cd project_dir && workon project")
run("make")
这不会在该目录中,也不会在虚拟环境中。虽然现在Fabric中有用于cd()的上下文管理器,但它们更多地是在每次运行时添加一个cd。
在项目工作的大局中,这对于大多数项目的工作方式几乎没有影响,基本上不会被注意到。但是,对于某些需要,您可能会使用pexpect来管理此状态,例如多个sudo或某种无法使用标志自动化的交互式任务。
尽管如此,这并不是Fabric的缺点,因为它只是Python,您完全可以在fabric任务中包含pexpect代码。
不过,在所有其他方面,Fabric比从头开始编写pexpect代码更好地管理远程连接和运行命令的所有艰苦工作。
更新 我已经被告知有一个与Fabric和pexepect一起使用的项目,您可以在此问题的答案中了解更多信息。