Как настроить портативный сервер pydoc, который закрывается, когда портативные браузеры были закрыты? - PullRequest
0 голосов
/ 27 ноября 2010

Я установил переносную среду на флешку, состоящую из Chromium Portable, Firefox Portable и Python 3. Я пытаюсь написать скрипт Python 3, который запускает сервер pydoc для доступа либо в Chromium Portable, либо в Firefox. Портативный. Если Chromium Portable уже активен, откроется новая вкладка на сервере, если не будет запущен Firefox Portable, и сервер будет доступен оттуда. Когда все процессы Chromium Portable \ chrome.exe и Firefox Portable были закрыты, сервер должен быть выключен. Следующий код - это то, что я написал до сих пор.

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 всегда будет знать, где искать исполняемые файлы. Моя проблема в том, что я не уверен, как реализовать процесс, который определит, нужно ли просто открывать новую вкладку в Chromium Portable или открывать Firefox Portable и, более того, выключать сервер после каждого процесса любого браузера, который был закрыт. Я просмотрел множество ссылок, относящихся к подпроцессам и т. Д., Особенно как ждать несколько дочерних процессов , как убить подпроцесс и , гарантируя, что подпроцессы не работают при выходе из программы Python . Я установил пакеты pywin32, wmi, comtypes и psutil в свою копию Python 3. Помогите, пожалуйста? Если мой код необходимо удалить, это нормально. Я пытаюсь выучить. Заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2010

В принципе, вы должны иметь возможность использовать метод wait () ваших объектов Popen.Примерно так:

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

(Измените функции запуска так, чтобы они заканчивались на return subprocess.Popen(...)

Но я не знаю, насколько хорошо это будет работать с современными браузерами.В Linux, если Firefox вызывается для открытия адреса, и он обнаруживает, что у вас уже открыт Firefox, новый процесс передает URL-адрес старому процессу и немедленно завершает работу.Такого рода вещи могут испортить то, что вы пытаетесь сделать.

...