2014-05-12 12 views
5

ilan:Kumaş'ta, başka bir python dosyasından görevleri nasıl yürütebilirim? Bazı görevler bir fabfile (fabfile.py) sahip

# fabfile.py 
from fabric.api import * 

@task 
def start(): 
    # code 

@task 
def stop(): 
    # code 

Sonra böyle kumaştan yürütmek fonksiyonunu kullanarak bu görevlerden herhangi birini aramaya çalıştığınızda:

# 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') 

It Bu hata yükseltir:

niyetim farklı argümanlarla denebilecek fabfile belirtilen bazı görevler için sarmalayıcı bir tür yapmaktır
Fatal error: None is not callable or a valid task name 

, ve bu ana programa bir çağrı yaptığınızda gerçekleştirilecek görev argümanlardan alınmalıdır, bu yüzden işlevi açık bir şekilde arayamıyorum, ancak görev isimlerini kullanamıyorum.

Bu nasıl yapılır? Belki de kumaşın nasıl çalıştığı yanlış anlaşılır mıyım?

execute(start) Sizin

+0

'fab -h' komutunu çalıştırın, şu şekilde olur:' -f PATH, --fabfile = PATH'. – WKPlus

+0

Ama diğer bir python komut dosyasından, fab aracını kullanmadan görevleri kullanmaya çalışıyorum: s – Garinoth

cevap

7

değiştirin execute('start') ederiz. işe yaramadı yürütmek için bir görevadi geçmesine neden

öğrenebilirim yoktu, ama bunun bir çözümü vardır:

import fabfile 
execute(getattr(fabfile, 'start')) 

Güncelleme: biraz kod okuma ve kumaşın bazı testini yaptıktan sonra , Bence execute('task_name') sadece kumaş görevleri yüklendiğinde kullanılabilir. Varsayılan olarak böyle fabfile.py bunu kullanabilirsiniz:

@task 
def task1(): 
    #do task1 

@task 
def task2(): 
    #do task2 

@task 
def task3(): 
    #do task1 and task2 
    execute('task1') 
    execute('task2') 

O zaman birlikte task1 ve task2 yürütmek için fab task3 kullanabilirsiniz. Ama şimdiye kadar, hala bir araç kumaşı kullanıyorum.

Güncelleme tekrar

:-) Sonra kumaş biraz kodunu okumak ve bir araç olarak kullanım kumaş fabfile gelen görevleri yüklemek için fabric.main.load_fabfile çağırır fabric.main.main arayacak bulundu.

Komut dosyanızı çalıştırmak için python main.py kullandığınızdan, fab dosyasını içe aktarmış olsanız bile fab görevleri yüklenmez. Bu yüzden sana main.py biraz kodu ekleyin:

docstring, callables, default = load_fabfile('fabfile.py') 
state.commands.update(callables) 

Ve şimdi, execute('start') sen istediğini tam olarak çalışmaktadır.

+0

Çalışıyor, ama bir argüman olarak geçeceğinden, görev adını kullanmam gerekiyor. Burada belirtildiği gibi: http://docs.fabfile.org/en/latest/api/core/tasks.html#fabric.tasks.execute Görev adı – Garinoth

+0

@Garinoth cevabımı güncelledikten sonra çalışmalıdır. – WKPlus

+0

Evet, işe yarıyor! Bu çözümü düşünmediğim görev adını kullanmaya karar verdim. Teşekkür ederim! – Garinoth

İlgili konular