Python - Flask - Öffnet eine Webseite im Standardbrowser

8

Ich arbeite an einem kleinen Projekt in Python. Es ist in zwei Teile geteilt.

Der erste Teil ist dafür verantwortlich, das Web zu crawlen und einige Informationen zu extrahieren und in eine Datenbank einzufügen.

Der zweite Teil ist dafür verantwortlich, diese Informationen unter Verwendung der Datenbank zu präsentieren. Beide Teile teilen sich die Datenbank. Im zweiten Teil verwende ich das Flask-Framework, um Informationen als HTML mit einigen Formatierungen, Stilen usw. anzuzeigen, damit es sauberer aussieht.

Quelldateien beider Teile befinden sich im selben Paket. Um dieses Programm ordnungsgemäß auszuführen, muss der Benutzer jedoch den Crawler und den Ergebnispräsentator wie folgt separat ausführen:

python crawler.py

und dann

python presenter.py

Alles ist in Ordnung, nur eine Sache. Was ich, welcher Präsentator zu tun ist, ist, Ergebnis im HTML-Format zu erstellen und die Seite mit Ergebnissen im Standardbrowser des Benutzers zu öffnen, aber es wird immer zweimal geöffnet, wahrscheinlich wegen der Anwesenheit der Methode run (), die Flask in einem neuen Thread startet Dinge werden für mich bewölkt. Ich weiß nicht, was ich tun sollte, um mein presenter.py zu machen, um nur ein Tab / Fenster zu öffnen, nachdem ich es ausgeführt habe.

Hier ist der Ausschnitt meines Codes:

%Vor%     
koleS 20.06.2012, 17:45
quelle

1 Antwort

17

Ich benutze den gleichen Code unter Mac OS X (mit Safari-, Firefox- und Chrome-Browsern) die ganze Zeit, und es läuft gut. Ich nehme an, dass Sie vielleicht Flasks Auto-Reload-Funktion nutzen. Setzen Sie debug=False und es wird nicht versucht, automatisch neu zu laden.

Andere Vorschläge, basierend auf meiner Erfahrung:

  • Ziehen Sie in Betracht, den von Ihnen verwendeten Port zu randomisieren, da schnelle Edit-Run-Test-Schleifen manchmal feststellen, dass der OS-Port 5000 immer noch verwendet wird. (Oder, wenn Sie den Code mehrmals gleichzeitig ausführen, sagen Sie zufällig, der Port wird wirklich noch verwendet.)
  • Geben Sie der App eine kurze Zeit Zeit, um hochzufahren, bevor Sie die Browseranfrage starten. Ich mache das durch den Aufruf von threading.Timer .

Hier ist mein Code:

%Vor%

(Dies ist alles unter dem if __name__ == '__main__': , oder in einer separaten "start app" -Funktion, wenn Sie möchten.)

    
Jonathan Eunice 20.06.2012, 19:09
quelle

Tags und Links