2016-11-09 1 views
2

Ich benutze Python3.4 Luigi-Pipeline, die mit Linux-Terminal interagiert, und ich muss Benutzereingaben nehmen. Ich habe den Code, der unten etwas wie folgt aussieht:Ausführungsablauf in Python

test = input("Enter data: ") 
logger.info(test) 

Class One{...} 
Class Two{...} 
Class Three{...} 

Ich würde das Terminal erwarte nichts nach "Enter data: " drucken, aber es hält das Terminal mit Debug-Informationen zu aktualisieren (dh Fragen Scheduler für die Arbeit in Erwartung Ersten Klasse zu beenden), so dass die Benutzer keine Eingaben eingeben können. Gibt es eine Möglichkeit, das Drucken des Terminals zu verhindern, bis die Benutzereingabe erfolgt?

Dank

UPDATE

Es scheint, dass die Klasse One selbst ausgeführt wird, wenn Benutzer nicht eingegeben gelangt. Ich bin nicht sicher, warum das passiert. ,,

+0

Wenn Sie einige "Klassenelemente" in der Klasse haben, nicht in ihren Methoden, wird sie beim Start ausgeführt, wenn die Datei geladen wird. Zeigen Sie Ihre Klasse. – furas

+0

Es klingt, als ob Luigi Pythons Eingabe in die Pipe umleitet, also nicht mit dem Terminal verbunden ist. – Barmar

Antwort

1

Ich denke, es ist besser, separate Dateien für Ihr Skript und Ihre Aufgaben zu haben und die Hauptaufgabe auf diese Weise auslösen. Die Idee besteht darin, Benutzereingaben zu lesen, und wenn sie nicht leer sind, führen Sie die gewünschte Aufgabe aus.

import luigi 
from my_tasks import MyTask 

if __name__ == "__main__": 
    test = input("Enter data: ") 
    if test: 
     luigi.build([MyTask1(123, "foobar")], local_scheduler=False) 

Es gibt zumindest eine andere Art und Weise ein Luigi Aufgabe programmatisch zu instanziiert und ausgeführt, dass Sie in this answer sehen können.