Frage

würde ich einzubetten wie die großen Flasche Web-Framework in eine kleine Anwendung (erstes Ziel ist Windows-Betriebssystem ). Diese App startet die Flasche Webserver dank des Subprozess-Modul.

import subprocess
p = subprocess.Popen('python websrv.py')

Die Flasche App ist ganz einfach

@route("/")
def index():
    return template('index')

run(reloader=True)

Es beginnt den Standard-Web-Server in eine Windows-Konsole.

Alles scheint Ok, außer der Tatsache, dass ich muss Strg-C drücken Sie die Flasche Webserver zu schließen. Ich möchte, dass die Master-App beendet den Webserver, wenn es Abschaltungen. Ich kann nicht einen Weg finden, das zu tun (p.terminate () nicht funktioniert in diesem Fall leider)

Jede Idee?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Es gibt zwei Möglichkeiten zum Herunterfahren ein Nachladen Server:

1) Sie beenden p (mit os.kill(p.pid) oder p.terminate()) und dann die Änderung ändern Zeit von ‚websrv.py‘ (os.utime('websrv.py')) eine automatische Abschaltung des Kindes Prozess auszulösen.

2) Sie beenden p mit os.kill(p.pid, signal.SIGINT), die zu einer Ctrl-C Abschaltung identisch ist.

Andere Tipps

Es scheint, dass der Prozess beendet funktioniert nicht, wenn Flaschen in Reload-Modus befindet. In diesem Fall beginnt es iteself eine subprocess.

Wenn reload auf False gesetzt ist, scheint das beenden Ok zu arbeiten.

Beginnend mit 0.8.1 dem Nachladen-Server ist intelligent genug, um verwaiste Prozesse zu bereinigen. Sie haben nun mehr Möglichkeiten, um den Server zu beenden:

  • Hit Ctrl-C oder senden SIGINT an den übergeordneten Prozess. (Empfohlen)
  • Tötet den übergeordneten Prozess. Das Kind wird sterben anmutig innerhalb von 2 Sekunden.
  • Kill the Child-Prozess oder sys.exit () mit jedem Statuscode anders als 3. Die Eltern sterben sofort.

Ich hatte Probleme schließen eine Flasche Server innerhalb einer Anfrage als Flasche Anfragen in Subprozesse zu laufen scheint.

Ich fand schließlich die Lösung zu tun war:

sys.stderr.close()

in der Anfrage (die an die Flasche Server wurden übergeben und behauen es).

versuchen Vielleicht in Ihrem Prozess zu tun und sehen, ob Flasche die Nachricht erhält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top