我已经在闪存驱动器上设置了一个便携式环境,该速度由Chromium Portable,Firefox Portable和Python 3组成。我正在尝试编写一个Python 3脚本,该脚本将启动pydoc服务器,以在Chromium Portable或Firefox Portable中访问。如果Chromium Portable已经处于活动状态,则将打开服务器的新选项卡,如果未启动Firefox便携式,则将从那里访问服务器。当关闭Chromium Portable 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将始终知道在哪里寻找可执行文件。我的问题是,我不确定如何实施该过程,这些过程将决定是否简单地打开Chromium Portable中的新选项卡或打开Firefox Portable,然后在关闭每个浏览器的每个过程之后关闭服务器。我研究了许多与子过程等有关的链接 如何等待多个子过程, 如何杀死子进程确保子流程在退出Python计划中死亡. 。我已经在Python 3的副本中安装了Pywin32,WMI,Comtypes和Psutil套餐。请帮忙吗?如果有必要丢弃我的代码,则可以。我在尝试学习。提前致谢。

有帮助吗?

解决方案

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

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