Warten auf Stdout auf Popen

Ich versuche, eine Akzeptanz Test Kabelbaum für eine Flasche App und ich bin derzeit kämpfen, um die App zu starten, bevor Sie Anrufe zu starten.

Nach dem Bau geht es gut:

class SpinUpTests(unittest.TestCase): def tearDown(self): super().tearDown() self.stubby_server.kill() self.stubby_server.communicate() def test_given_not_yet_running_when_created_without_config_then_started_on_default_port(self): self.not_yet_running(5000) self.stubby_server = subprocess.Popen(['python', '../../app/StubbyServer.py'], stdout=subprocess.PIPE) time.sleep(1)#<--- I would like to get rid of this self.then_started_on_port(5000) 

Ich würde gerne auf stdout warten für:

Self.stubby_server = subprocess.Popen (['python', '../../app/StubbyServer.py'], stdout = subprocess.PIPE) time.sleep (1) # <— Ich würde gerne bekommen Befreien

  • Laufen auf http://127.0.0.1:[port]/ (Drücken Sie STRG + C zum Beenden)

Ich habe es versucht

 for line in self.stubby_server.stdout.readline() 

Aber readline() beendet nie, tho Ich sehe schon die Ausgabe im Testausgabefenster.

Irgendwelche Ideen, wie ich warten kann, bis die Flasche App anfangen kann, ohne einen expliziten sleep() zu benutzen sleep() ?

One Solution collect form web for “Warten auf Stdout auf Popen”

Mit dem Retry- Paket wird dies helfen, Ihr Problem zu überwinden. Letztendlich legen Sie fest, was Sie suchen, um es erneut zu versuchen, welche Ausnahme Sie erneut versuchen möchten, und Sie können bestimmte Timing-Parameter festlegen, je nachdem, wie Sie es wiederholen möchten. Es ist ziemlich gut dokumentiert.

Hier ist ein Beispiel dafür, wie ich das in einem der Projekte gelöst habe, an denen ich hier gearbeitet habe

Hier ist das Code-Snippet, das dir helfen wird, falls dieser Link nicht funktioniert:

 @classmethod def _start_app_locally(cls): subprocess.Popen(["fake-ubersmith"]) retry_call( requests.get, fargs=["{}/status".format(cls.endpoint)], exceptions=RequestException, delay=1 ) 

Wie du sehen kannst, habe ich gerade versucht, meinen Endpunkt mit einem fargs mit requests zu treffen (die fargs sind die Argumente an requests.get wie du siehst, ruft die Methode zurück, die du an retry_call ) und basiert auf der RequestException ich erwartet hatte , Würde ich mit einer Verzögerung von 1 Sekunde versuchen.

Schließlich ist "fake-ubersmith" der Befehl, der deinen Server ausführen wird, was letztlich dein ähnliches Kommando ist: 'python', '../../app/StubbyServer.py'

  • Verwenden von% r mit input () in python 3
  • Zahlen in einer Liste, finden Durchschnitt der Umgebung
  • Daten aus Binärdatei in Python anzeigen
  • Hinzufügen von Werten von Wörterbüchern in Python
  • Verweis auf eine Funktion von einer anderen Klasse in Kivy
  • Wie man verschiedene Eingabetypen einnimmt und bei jedem etwas anderes macht? Python 3.5
  • Achsenbeschriftung mit matplotlib zu spärlich
  • Wie suche ich mehrere Zeilen in Python 3?
  • Tokenize python Quellcode Beispiele (in Python)
  • Pythonfilter / max Combo - Überprüfung auf leeren Iterator
  • Arthimatic Quiz nicht akzeptieren korrekte Antworten
  • Python ist die beste Programmiersprache der Welt.