2017-12-04 4 views
2

Ich habe zwei Aufgaben in waf und sie müssen in der richtigen Reihenfolge ausgeführt werden, und die zweite Aufgabe muss warten, bis die erste Aufgabe beendet ist.Sag Waf, dass die Aufgabe beendet wird, bevor die nächste Aufgabe gestartet wird

Um zu zeigen, dass es die Art und Weise benimmt ich es erwartet zu arbeiten, ich warte in den Aufgaben in der ersten Aufgabe (t_1) Sekunden und in der zweiten Aufgabe (t_2) Sekunden. Und die zweite Aufgabe endet zuerst. Dies ist zu sehen, da die Ordner, die ich nach dem Warten erstellt habe, die Zeitstempel t_2 < t_1 haben.

In einer Frage: Wie kann ich sagen, waf, dass t_2 exectued nach t_1 erfolgreich abgeschlossen?


  1. MWE: wscript

    from waflib import Context, Options 
    from waflib import Task, TaskGen 
    from waflib.Tools.compiler_c import c_compiler 
    
    def options(opt): 
        opt.load('compiler_c') 
    
    def configure(cnf): 
        cnf.load('compiler_c') 
    
    def build(bld): 
        bld.program(features=['t_1', 't_2'], source='main.c', target='abc') 
    
    class t_1(Task.Task): 
        always_run = True 
        run_str = 'echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_1' 
        color = 'RED' 
    
    
    @TaskGen.feature('t_1') 
    @TaskGen.after('apply_link') 
    @TaskGen.before('t_2') 
    def add_t_1_task(self): 
        self.create_task('t_1') 
    
    
    class t_2(Task.Task): 
        always_run = True 
        run_str = 'echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2' 
        color = 'RED' 
    
    
    @TaskGen.feature('t_2') 
    @TaskGen.after('apply_link', 't_1') 
    def add_t_2_task(self): 
        self.create_task('t_2') 
    

Antwort

2

Sie haben die Aufgabe, zu spezifizieren, die vor (in diesem Beispiel t_1) in after Attribute der laufen muss Aufgabe, die sollte "warten "für die andere Aufgabe zu beenden (in diesem Beispiel (t_2). Es wird wie folgt angegeben: after = ['t_1']

Die Dokumentation dazu finden Sie hier in build order constraints im waf book Bereich.

Die Dokumentation, die generic task generator is §9.3 in der aktuellen Waf-Buch (Waf 2.0), vor allem §9.3.4 erläutert, erklärt die Task-Generator-Ausführungsreihenfolge.


Das komplette Beispiel MWE dann wie folgt aussieht:

from waflib import Context, Options 
from waflib import Task, TaskGen 
from waflib.Tools.compiler_c import c_compiler 

def options(opt): 
    opt.load('compiler_c') 

def configure(cnf): 
    cnf.load('compiler_c') 

def build(bld): 
    bld.program(features=['t_1', 't_2'], source='main.c', target='abc') 

class t_1(Task.Task): 
    always_run = True 
    run_str = 'date && echo 1 && echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_1 && date && echo 1' 
    color = 'RED' 


@TaskGen.feature('t_1') 
@TaskGen.after('apply_link') 
@TaskGen.before('t_2') 
def add_t_1_task(self): 
    self.create_task('t_1') 


class t_2(Task.Task): 
    always_run = True 
    after = ['t_1'] # <---------------------------- **The problems solution** 
    run_str = 'date && echo 1 && echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2 && date && echo 2' 
    color = 'RED' 


@TaskGen.feature('t_2') 
@TaskGen.after('apply_link', 't_1') 
def add_t_2_task(self): 
    self.create_task('t_2') 
+1

'@ TaskGen.before ('t_2')' ist falsch. Es sollte '@ TaskGen.before ('add_t_2_task')' sein. Außerdem ist es nicht notwendig. Die Aufgaben 't_1' und' t_2' können in Ihrem Beispiel in beliebiger Reihenfolge erstellt werden. Was wichtig ist, ist die Ausführungsreihenfolge. – neuro

+0

Danke für den Kommentar. Wo finde ich die Dokumentation, die ich brauche, um die Aufgabengenerierungsmethoden und nicht Aufgaben als Einschränkung zu setzen? Aber meine Lösung für das Problem, 'after = ['t_1']' in 't_2 (Task.Task) zu verwenden:' ist richtig? – wafwafwaf

+0

@neuro Entschuldigung für die Frage, aber wie Sie sehr erfahren mit Waf scheinen, würde ich sehr schätzen, wenn Sie mir sagen würden, wo in der Dokumentation zu finden? – wafwafwaf

Verwandte Themen