如何将Fabric任务名称作为变量传递给execute()
我遇到一个情况,任务的名字是从一个json文件里以字符串的形式传过来的,像这样:u'taskName'
我想按照这个格式来执行任务:
import fabfile
tn = mydict['taskname'] # 这个任务名肯定在导入的fabfile里。
//做点什么让这个能工作:
out = execute(tn) # 这显然是行不通的!
我知道execute
需要一个任务对象。
有人能帮我把字符串(在tn里)转换成任务对象吗?或者如果我说错了,有人能帮我找出怎么调用fabfile里那个特定的任务吗?
1 个回答
0
如果你在执行某个语句时遇到错误,可能是因为你调用了一个不是函数的对象,或者用了一个不是任务名称的字符串。下面这个例子可以简单说明这个问题:
从 fabric.api 导入所有内容
@task
def foo():
print "bar"
@task
def buzz():
execute("foo")
execute(foo)
注意,这段内容来自于 execute 的文档,它可以接受一个字符串(只要这个字符串对应的是一个用 @task 装饰的函数)或者直接使用函数对象(不需要任何装饰)。
执行的方式如下:
$ fab -f test.py buzz
bar
bar
Done.
另外要注意的是,从 execute()
调用中你不会得到运行的输出。再次查看文档中关于返回值的部分,它提到“返回一个字典,将主机字符串映射到该主机执行任务的返回值。”