Как я могу настроить портативный сервер PYDOC, который закрывается, когда портативные браузеры были закрыты?

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

  •  28-09-2019
  •  | 
  •  

Вопрос

Я настроил портативную среду на моем флэш-накопителе, состоящей из портативного хрома, 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 к старому процессу и выходит сразу. Такую вещь испортила бы то, что вы пытаетесь сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top