我偶然发现了pexpect,我的印象是它看起来与fabric大致相似。我试图找到一些比较,但没有成功,所以我在这里问——以防有人对这两种工具都有经验。
我的印象(它们大致相当)是正确的,还是只是表面上的样子?
我都用过。 Fabric比 pexpect 更高级,恕我直言,要好得多。这取决于您使用它的目的,但如果您的用途是部署和配置软件,那么 Fabric 是正确的选择。
您还可以将它们结合起来,以获得两全其美的效果,即织物远程处理功能和预期的提示处理。看看这些答案:https ://stackoverflow.com/a/10007635/708221和https://stackoverflow.com/a/9614913/708221
两者都有不同的用例。Fabric 没有做到的事情是保持状态。每个 Fabric api 命令(例如:run/sudo)都是它自己的单独命令。所以如果你这样做:
run("cd project_dir && workon project")
run("make")
这不会在那个目录中,也不会在 virtualenv 中。虽然现在 Fabric 中有 cd() 的上下文管理器,但它们或多或少地在每次运行之前都添加了 cd。
在事物的计划中,这与大多数项目的工作方式几乎没有关系,并且基本上没有被注意到。但是,对于某些需要,您可以使用 pexpect 来管理此状态,用于多个 sudo 或某种无法使用标志自动执行的交互式任务。
尽管所有这些都不是 Fabric 的缺点,因为它只是 python,您完全可以在 Fabric 任务中包含 pexpect 代码。
尽管在所有其他方面,Fabric 从根本上管理远程连接和运行命令的所有艰苦工作,都比使用 pexpect 从头开始编写代码更好。
更新我已获悉一个与 Fabric 和 pexepect 一起使用的项目,您可以在此问题的答案中看到更多信息