如何设置在便携式浏览器关闭时关闭的便携式pydoc服务器?

时间:2010-11-27 20:19:01

标签: python pydoc

我在我的闪存驱动器上设置了一个便携式环境,包括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,以及在关闭任何浏览器的每个进程后关闭服务器。我查看了很多与子进程有关的链接,尤其是how to wait for multiple child processeshow to kill a subprocessensuring subprocesses are dead on exiting python program。我在我的Python 3副本中安装了pywin32,wmi,comtypes和psutil包。请帮助吗?如果我的代码被丢弃是必要的,那就没问题。我在尝试学习。提前致谢。

1 个答案:

答案 0 :(得分:0)

原则上,您应该能够使用Popen对象的wait()方法。像这样:

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

(将您的启动功能修改为return subprocess.Popen(...

但我不知道这对现代浏览器有多好。在Linux中,如果调用Firefox来打开一个地址,并且它检测到你已经打开了Firefox,则新进程将URL传递给旧进程,并立即退出。那种事情会弄乱你想要做的事情。