我想使用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()
附带的所有其他内容的功能。
答案 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无法支持它。