在localhost上使用fabric

时间:2016-04-12 16:10:05

标签: python fabric

我想使用fabric来代替shell脚本在本地计算机上执行操作。

例如,我想检查一个目录是否存在,以及它是否不创建该目录。

我可以使用local('ls')在本地运行内容,但我想使用fabric中的其他功能,例如fabric.contrib.files.exists(path)

我试过RTFM,但缺乏示例并没有帮助。

如何使用Fabric在我的localhost上运行fabric.contrib.files.exists('/path/to/test')

以下内容适用于使用ls的{​​{1}}:

local()

这是一种笨拙的解决方案,要求我from fabric.api import local def test(): local('ls') ssh完成任务:

localhost

所以我希望from fabric.api import env from fabric.contrib import files env.hosts = ['127.0.0.1'] def test(): if files.exists('/Users/ryan'): print 'path exists!' 具有local()附带的所有其他内容的功能。

1 个答案:

答案 0 :(得分:2)

当涉及fabric不允许回送ssh连接时,您无法对其辅助函数做很多事情。 local()https://github.com/fabric/fabric/blob/1.11.1/fabric/operations.py#L1219)只是subprocess的简称..还有一些代码,你通常不得不写,我不是说它没用,因为我已经用过了它有好几次,但是os lib可以做得更多。

Theres一个古老的表达方式,为这份工作找到合适的工具。

exists()https://github.com/fabric/fabric/blob/1.11.1/fabric/contrib/files.py#L18)正在运行tests -e <file path>,它将返回0表示一切正常,如果不存在,则返回1。 - 你是否已经看到这种情况变得如此丑陋和失控,当你从现在开始回来3个月后再看看你会更加困惑?!?!

如果你真的想使用local()local(test -e <file path>) ..我仍然说只使用os

- ps,不要使用local(ls) - 就像没有必要那样,subprocess很贵,os模块很快,很好.. 。os.listdir('.')为什么你不能看到光明?! :P

回答旧问题

本地?使用os中的os.path.isfile(<file>)os.path.isdir(<dir>),因为os lib维护得很好,所以Fabric无法支持它。