Как я могу настроить портативный сервер PYDOC, который закрывается, когда портативные браузеры были закрыты?
Вопрос
Я настроил портативную среду на моем флэш-накопителе, состоящей из портативного хрома, Pirefox Portable и Python 3. Я пытаюсь написать сценарий Python 3, который запустит сервер PYDOC, который можно получить либо в портативном портативном виде Chromium, либо в портативном виде хрома, либо в портативном виде хрома. Если Portable Chromium уже активен, будет открыта новая вкладка на сервере, если не будет запущена портативной портативный Firefox, и сервер будет доступен оттуда. Когда все процессы портативов хрома chrome.exe и Firefox портативные были закрыты, сервер должен быть выключен. Следующий код - это то, что я написал до сих пор.
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)
Этот скрипт запускается из пакетного файла, который устанавливает значение homedrive к текущей букве флэш-накопителя, поэтому Python всегда будет знать, где искать исполняемые файлы. Моя проблема заключается в том, что я не уверен, как реализовать процесс, который определит, просто открыть новую вкладку в портативных хромах или открыть портативный Firefox и, кроме того, чтобы выключить сервер после каждого процесса того, что браузер был закрыт. Я посмотрел на многие ссылки, относящиеся к подпроцессам и т. Д., Особенно Как ждать нескольких дочерних процессов, Как убить подпроцесс и Обеспечение подпроцессов мертв на выходе из программы Python. Отказ Я установил Pywin32, WMI, Comtypes и Psutil Packages в моей копии Python 3. Помогите пожалуйста? Если для моего кода необходимо отбрасывать, все в порядке. Я пытаюсь выучить. Заранее спасибо.
Решение
В принципе, вы должны быть в состоянии использовать метод ожидания () вашего Popen объектов. Что-то вроде этого:
pydoc_process = launch_pydoc()
browser_process = launch_browser()
browser_process.wait()
pydoc_process.terminate()
(Измените свои функции запуска, чтобы закончиться return subprocess.Popen(...
)
Но я не знаю, насколько хорошо это будет работать с современными браузерами. В Linux, если Firefox вызывается для открытия адреса, и он обнаруживает, что у вас уже есть открытый Firefox, новый процесс вручает URL к старому процессу и выходит сразу. Такую вещь испортила бы то, что вы пытаетесь сделать.