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

Posted

技术标签:

【中文标题】如何设置在便携式浏览器关闭时关闭的便携式 pydoc 服务器?【英文标题】:How do I setup a portable pydoc server that closes when portable browsers have been shut down? 【发布时间】:2010-11-27 20:19:00 【问题描述】:

我已经在我的闪存驱动器上设置了一个便携式环境,包括 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 processes、how to kill a subprocess 和ensuring subprocesses are dead on exiting python program。我在我的 Python 3 副本中安装了 pywin32、wmi、comtypes 和 psutil 包。请帮忙?如果有必要丢弃我的代码,那没关系。我在尝试学习。提前致谢。

【问题讨论】:

【参考方案1】:

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

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

(修改你的启动函数以return subprocess.Popen(...结尾)

但我不知道它在现代浏览器中的效果如何。在 Linux 中,如果调用 Firefox 打开一个地址,并且它检测到您已经打开了 Firefox,那么新进程会将 URL 交给旧进程,然后立即退出。那种事情会搞砸你正在尝试做的事情。

【讨论】:

非常感谢!这解决了我的大部分问题。我会看看我能不能弄清楚剩下的。

以上是关于如何设置在便携式浏览器关闭时关闭的便携式 pydoc 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

用于 C/C++ 的便携式 zip 库(不是应用程序)[关闭]

用于 C/C++ 的便携式 zip 库(不是应用程序)[关闭]

类似于 SQLite 或 SQL CE 的便携式 OLAP 数据库 [关闭]

我用android的手机开便携式Wlan热点!屏幕锁定后就断开网络了,该怎么操作!

我用android的手机开便携式Wlan热点!屏幕锁定后就断开网络了,该怎么操作!

什么是最好的(便携式)跨平台任意精度数学库? [关闭]