[英]In Fabric, how can I execute tasks from another python file?
我有一個fabfile(fabfile.py),聲明了一些任務:
# fabfile.py
from fabric.api import *
@task
def start():
# code
@task
def stop():
# code
然后,當我嘗試使用面料中的執行函數調用任何這些任務時,如下所示:
# main.py
from fabric.api import execute
from fabfile import * # I don't really know if this is necessary
# or how should it be done
def main():
execute('start')
它引發了這個錯誤:
Fatal error: None is not callable or a valid task name
我的目的是為fabfile中指定的某些任務創建一個包裝器,可以使用不同的參數調用,並且當你調用這個主程序時必須從參數中獲取要執行的任務,所以我不能顯式調用該函數,但使用任務名稱。
怎么做? 也許我誤解了面料應該如何運作?
謝謝
更改execute('start')
以execute(start)
。
我沒有找到為什么傳遞一個taskname執行不起作用,但有一個解決方法:
import fabfile
execute(getattr(fabfile, 'start'))
更新:在讀取位代碼並對結構進行一些測試后,我認為execute('task_name')
只能在加載結構任務時使用。 默認情況下,您可以在fabfile.py中使用它,如下所示:
@task
def task1():
#do task1
@task
def task2():
#do task2
@task
def task3():
#do task1 and task2
execute('task1')
execute('task2')
然后你可以使用fab task3
執行task1
和task2
在一起。 但到目前為止,我仍在使用面料工具。
再次更新:-)
然后我讀了一些結構代碼,發現使用fabric作為工具將調用fabric.main.main
,它調用fabric.main.load_fabfile
從fabfile加載任務。
由於您使用python main.py
來運行腳本,即使您導入fabfile,也不會加載fab任務。 所以我給你main.py
添加了一些代碼:
docstring, callables, default = load_fabfile('fabfile.py')
state.commands.update(callables)
現在, execute('start')
完全按照您的意願工作。
總是不需要使用fabfile.py。 我們可以給fabfile任何名字。 只有我們需要指定一個參數--fabfile
。
Syntax:
fab --fabfile=<Your File Goes Here> function_name
Example:
fab --fabfile=test test_deploy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.