fabric与pexpect的对比
3 个回答
5
这两者有不同的使用场景。pexpect有一个Fabric没有的功能,就是保持状态。每个Fabric的API命令(比如:run或sudo)都是独立的命令。所以如果你这样做:
run("cd project_dir && workon project")
run("make")
那么这个命令不会在那个目录下,也不会在虚拟环境中。虽然Fabric现在有用于cd()的上下文管理器,但它们基本上是在每次运行前都加上一个cd命令。
从整体来看,这对大多数项目的运作影响不大,基本上是不会被注意到的。不过对于某些需求,你可能会用pexpect来管理这种状态,比如需要多次使用sudo或者进行一些无法用标志自动化的交互任务。
不过,这并不是Fabric的缺点,因为Fabric是纯Python写的,你完全可以在Fabric任务中包含pexpect的代码。
在其他方面,Fabric在处理远程连接和执行命令方面,做得比你用pexpect从头写代码要好得多。
更新 我得知有一个项目可以同时使用Fabric和pexpect,你可以在这个问题的回答中看到更多信息。
6
你还可以把它们结合起来,这样就能同时享受到两者的优点:一种是可以远程操作的功能,另一种是处理提示的能力。可以看看这些回答:https://stackoverflow.com/a/10007635/708221 和 https://stackoverflow.com/a/9614913/708221
15
我用过这两种工具。Fabric 的抽象层次比 pexpect 高很多,我觉得它要好得多。具体要看你用它来做什么,但如果你是用来部署和配置软件的话,Fabric 是更合适的选择。