Estoy escribiendo una aplicación web que usa Selenium para raspar la pantalla de otro sitio web. Este raspado de pantalla solo ocurre una vez al día, así que prefiero no dejar Selenium y Xvfb corriendo todo el tiempo.¿Cómo comienzo y detengo un programa de Linux usando el módulo de subproceso en Python?
Estoy tratando de encontrar la manera de iniciar Xvfb y Selenium desde Python, y luego detenerlos una vez que se haya completado el screen scraping.
Si lo hacía manualmente, me gustaría empezar ellos en la línea de comandos y pulsa CTRL C para detenerlos. Estoy tratando de hacer lo mismo desde Python.
que parecen ser capaces de iniciar correctamente Xvfb así:
xvfb = Popen('Xvfb :99 -nolisten tcp', shell=True)
Pero cuando he intentado darlo por terminado:
xvfb.terminate()
y luego trató de empezar de nuevo (repitiendo mi comando inicial), me dice que ya se está ejecutando.
¿Esto obtiene cinco votos favorables? ¡Supuse que solo estaba siendo realmente estúpido! –
Pruebe 'xvfb.wait()' después de 'xvfb.terminate()'. En su defecto, intente 'xvfb.kill()'. –
Ctrl-C envía SIGTERM a un proceso de Unix. Su proceso python de usuario no puede enviar SIGTERM a su Xvfb ejecutándose como root. Obtenga el pid de su hijo, ejecute "sudo kill", luego "xvfb.wait()". –