Wie richte ich ein tragbares pydoc Server, der geschlossen wird, wenn die tragbare Browser heruntergefahren gewesen sein?

StackOverflow https://stackoverflow.com/questions/4293701

  •  28-09-2019
  •  | 
  •  

Frage

Ich habe eine tragbare Umgebung auf meinem Flash-Laufwerk ein, die aus Chrom Portable Firefox Portable und Python 3. Ich versuche, einen Python 3-Skript zu schreiben, die einen pydoc Server starten werden entweder in Chrom Tragbarer oder Firefox zugegriffen werden Tragbar. Wenn Chrom Tragbarer bereits aktiv ist, wird eine neue Registerkarte mit dem Server geöffnet, wenn nicht Firefox Portable gestartet wird und der Server wird von dort abgerufen werden. Wenn alle Prozesse von Chromium Tragbarer \ chrome.exe und Firefox Portable geschlossen wurden, sollte der Server heruntergefahren werden. Der folgende Code ist, was ich bisher geschrieben haben.

import subprocess
import os 

drive = os.environ['HOMEDRIVE']
def launch_browser():
    pass

def launch_pydoc():
    pythonw = drive + '\PortableApps\PortablePython_3x\App\pythonw.exe'
    doc_args = drive + '\PortableApps\PortablePython_3x\App\Lib\pydoc.py -p 50000'
    spDoc = subprocess.Popen(pythonw+' '+doc_args)

def launch_chrome():
    chrome = drive + '\PortableApps\ChromiumPortable\App\Chrome-bin\chrome.exe'
    chrome_args = r'http://localhost:50000/ --user-data-dir="C:\Users\Owner\AppData\Roaming\ChromePortable\nathan" --new-tab'
    spChrome = subprocess.Popen(chrome+' '+chrome_args)

def launch_mozilla():
    mozilla = drive + '\PortableApps\FirefoxPortableNightly\FirefoxPortable.exe'
    mozilla_args = 'http://localhost:50000/'
    spMozilla = subprocess.Popen(mozilla+' '+mozilla_args)

Dieses Skript wird aus einer Batch-Datei gestartet, die den Wert von HOMEDRIVE auf den aktuellen Flash-Laufwerksbuchstaben setzt so Python immer wissen, wo für die ausführbaren Dateien zu suchen. Mein Problem ist, dass ich nicht sicher bin, wie man den Prozess zu implementieren, einfach zu bestimmen, ob eine neue Registerkarte in Chromium öffnen Tragbarer oder Firefox Portable zu öffnen und darüber hinaus nach jedem Prozess den Server herunterzuzufahren, von welcher auch immer Browser geschlossen wurde. Ich habe bei vielen Links sah in Bezug auf subprocess etc besonders wie zu warten, für mehrere untergeordnete Prozesse , wie zu töten python eine subprocess und gewährleisten Subprozesse sind tot beim Verlassen programmieren . Ich habe pywin32, wmi installiert, comtypes und psutil Pakete in meiner Kopie von Python 3. Hilfe bitte? Wenn es notwendig ist, für meinen Code verworfen werden es ist OK. Ich versuche zu lernen. Danke im Voraus.

War es hilfreich?

Lösung

Grundsätzlich sollten Sie in der Lage sein, die wait () Methode verwenden Ihre Popen Objekte. So etwas wie folgt aus:

pydoc_process = launch_pydoc()
browser_process = launch_browser()
browser_process.wait()
pydoc_process.terminate()

(Ändern Sie Ihre Start-Funktionen mit return subprocess.Popen(... beenden)

Aber ich weiß nicht, wie gut das wird mit modernen Browsern. Unter Linux wird, wenn Firefox um eine Adresse zu öffnen genannt, und es erkennt, haben Sie bereits bekommen Firefox offen, die neue Prozess Hände die URL zu dem alten Verfahren und tritt sofort. So etwas würde vermasseln, was Sie versuchen zu tun.

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