¿Cómo puedo configurar un servidor pydoc portátil que se cierra cuando los navegadores portátiles han estado abajo cerrada?

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

  •  28-09-2019
  •  | 
  •  

Pregunta

He creado un entorno portátil en mi unidad flash portátil que consiste en cromo, Firefox Portable y Python 3. Estoy intentando escribir un script en Python 3 que pondrá en marcha un servidor pydoc a acceder ya sea en cromo portátil o Firefox Portátil. Si cromo portátil ya está activo, se abrirá una nueva pestaña con el servidor, si no se lanzará Firefox Portable y se puede acceder desde el servidor de allí. Cuando todos los procesos de cromo portátil \ chrome.exe y Firefox Portable se han cerrado, el servidor debe ser cerrado. El código siguiente es lo que he escrito hasta ahora.

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)

Este script se lanza desde un archivo por lotes que establece el valor de HOMEDRIVE a la letra de la unidad de flash actual lo que Python siempre sabrá dónde buscar los archivos ejecutables. Mi problema es que no estoy seguro de cómo poner en práctica el proceso que determinará si simplemente abrir una nueva pestaña en cromo portátil o para abrir Firefox Portable y, además, a cerrar el servidor después de cada proceso de lo que se ha cerrado el navegador. He mirado muchos enlaces relacionados con el subproceso etc especialmente cómo esperar a que múltiples procesos hijo , cómo para matar a un subproceso y subprocesos que aseguran están muertos al salir de pitón programar . He instalado pywin32, WMI, comtypes y paquetes psutil en mi copia de Python 3. Ayuda por favor? Si es necesario para mi código para ser desechado que está bien. Estoy intentando aprender. Gracias por adelantado.

¿Fue útil?

Solución

En principio, debería ser capaz de utilizar el método wait () de los objetos de su Popen. Algo como esto:

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

(Modificar sus funciones de lanzamiento para terminar con return subprocess.Popen(...)

Pero no sé lo bien que va a trabajar con los navegadores modernos. En Linux, si se llama Firefox para abrir una dirección, y detecta que ya tienes Firefox abierto, los nuevos procesos manos la dirección URL para el proceso antiguo, y las salidas de inmediato. Ese tipo de cosas podría estropear lo que estamos tratando de hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top