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'

  • Wie öffne ich eine Unicode-Textdatei in einem Zip?
  • Wie kann ich Quelldateien vorverarbeiten, während eine Sphinx läuft?
  • SQLAlchemy Text Zusammenpassende Daten im JSON-Feld mit UTF-8
  • Wie klicke ich auf eine Schaltfläche, um mit Python zu wählen
  • Unbehandelte Ausnahme im Thread begann python manage.py runserver
  • Python: Funktion zu glätten Generator mit einem anderen Generator
  • Python 3: TypeError: Typ str unterstützt die Puffer-API nicht
  • Was ist ein besserer Weg, um eine Klasse '__init__ Methode mit optionalen Keyword-Argumenten zu definieren?
  • Wie schreibe ich den Kartensatz hier, um Array mit dem ThreadPool-Modul zu berechnen?
  • Was tut mit offen in dieser situation
  • Wie berechnen Sie die Summe von zwei Polynomen?
  • Python ist die beste Programmiersprache der Welt.