Comment puis-je configurer un serveur pydoc portable qui se ferme lorsque les navigateurs portables ont été fermés?

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

  •  28-09-2019
  •  | 
  •  

Question

Je l'ai mis en place un environnement portable sur mon lecteur flash composé de chrome Portable, Firefox Portable et Python 3. Je suis en train d'écrire un script Python 3 qui va lancer un serveur pydoc à accéder soit en Chrome Portable ou Firefox Portable. Si Chrome Portable est déjà actif, un nouvel onglet au serveur sera ouvert, sinon Firefox Portable sera lancé et le serveur est accessible à partir de là. Lorsque tous les processus de Chrome Portable \ chrome.exe et Firefox Portable ont été fermés, le serveur doit être arrêté. Le code suivant est ce que je l'ai écrit à ce jour.

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)

Ce script est lancé à partir d'un fichier de commandes qui définit la valeur de HOMEDRIVE à la lettre de lecteur flash en cours et Python saura toujours où chercher les executables. Mon problème est que je ne suis pas sûr de savoir comment mettre en œuvre le processus qui déterminera si simplement ouvrir un nouvel onglet dans Chrome Portable ou pour ouvrir Firefox Portable et de plus pour arrêter le serveur après chaque processus de navigateur selon a été fermé. Je l'ai regardé de nombreux liens se rapportant à subprocess etc en particulier comment attendre plusieurs processus enfants , comment de tuer un sous-processus et sont morts assurant des sous-processus en sortie de python programme . J'ai installé pywin32, et wmi, comtypes forfaits psutil dans ma copie de Python 3. Aide s'il vous plaît? S'il est nécessaire que mon code pour être mis au rebut, il est OK. J'essaie d'apprendre. Merci d'avance.

Était-ce utile?

La solution

En principe, vous devriez être en mesure d'utiliser la méthode d'attente () de vos objets Popen. Quelque chose comme ceci:

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

(Modifier vos fonctions de lancement à la fin avec return subprocess.Popen(...)

Mais je ne sais pas comment cela va fonctionner avec les navigateurs modernes. Sous Linux, si Firefox est appelé à ouvrir une adresse, et il vous détecte avez déjà ouvert Firefox, les nouvelles mains de processus l'URL de l'ancien processus, et les sorties immédiatement. Ce genre de chose serait gâcher ce que vous essayez de faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top