Come faccio a impostare un server pydoc portatile che si chiude quando i browser portatili sono stati giù chiusa?

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

  •  28-09-2019
  •  | 
  •  

Domanda

Ho creato un ambiente portatile sul mio flash drive composto da Chromium Portable, Firefox Portable e Python 3. Sto cercando di scrivere uno script Python 3 che lancerà un server pydoc a cui accedere sia in Chromium Portable o Firefox Portatile. Se Chromium Portable è già attiva, una nuova scheda per il server sarà aperto, se non Firefox Portable sarà lanciato e il server sarà accessibile da lì. Quando tutti i processi di Chromium Portable \ chrome.exe e Firefox Portable sono stati chiusi, il server deve essere spento. Il seguente codice è quello che ho scritto finora.

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)

Questo script viene lanciato da un file batch che imposta il valore di HOMEDRIVE alla lettera di unità flash in modo da Python saprà sempre dove cercare gli eseguibili. Il mio problema è che io non sono sicuro di come implementare il processo che determinerà se è sufficiente aprire una nuova scheda in Chromium Portable o per aprire Firefox Portable e, inoltre, per arrestare il server dopo ogni processo di qualsiasi browser è stato chiuso. Ho guardato molti collegamenti relativi al sottoprocesso ecc soprattutto come aspettare per più processi figli , come uccidere un sottoprocesso e sottoprocessi assicurando che sono morti all'uscita pitone programmare . Ho installato pywin32, WMI, comtypes e pacchetti psutil nella mia copia di Python 3. Aiuto per favore? Se è necessario per il mio codice da scartare è OK. Sto cercando di imparare. Grazie in anticipo.

È stato utile?

Soluzione

In linea di principio, si dovrebbe essere in grado di utilizzare il metodo wait () degli oggetti vostra Popen. Qualcosa di simile a questo:

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

(Modificare le funzioni di lancio per finire con return subprocess.Popen(...)

Ma io non so come bene che funziona con i browser moderni. In Linux, se Firefox è chiamato ad aprire un indirizzo, e rileva che hai già Firefox aperto, il nuovo processo mani l'URL per il vecchio processo, e le uscite immediatamente. Questo genere di cose sarebbe rovinare quello che stai cercando di fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top