2010-11-27 3 views
0

私はChromium Portable、Firefox Portable、Python 3からなる私のフラッシュドライブにポータブル環境をセットアップしました。私はChromium PortableまたはFirefox Portableのいずれかにアクセスするpydocサーバを起動するPython 3スクリプトを書こうとしています。 Chromium Portableが既にアクティブになっている場合は、サーバーへの新しいタブが開きます。Firefox Portableが起動されていない場合は、そこからサーバーにアクセスします。 Chromium Portable \ chrome.exeおよびFirefox Portableのすべてのプロセスが終了したら、サーバーをシャットダウンする必要があります。次のコードはこれまでに書いたものです。ポータブルブラウザがシャットダウンされたときに閉じるポータブルpydocサーバを設定するにはどうすればよいですか?

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) 

このスクリプトはPythonが常にどこの実行可能ファイルを検索する場所を知っているので、現在のフラッシュドライブ文字にHOMEDRIVEの値を設定するバッチファイルから起動されます。私の問題は、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パッケージをインストールしました。どうすればいいですか?私のコードを破棄する必要があるならOKです。私は学ぶことをしようとしています。前もって感謝します。

答えて

0

原則として、Popenオブジェクトのwait()メソッドを使用できるはずです。このような何か:

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

return subprocess.Popen(...で終わるためにあなたの打ち上げの機能を変更します)

しかし、私は、現代のブラウザで動作することをどれだけ知っていません。 Linuxでは、Firefoxがアドレスを開くために呼び出され、既にFirefoxを開いていることが検出された場合、新しいプロセスはそのURLを古いプロセスに渡し、すぐに終了します。そんなことは、あなたがしようとしていることを混乱させます。

+0

ありがとうございます!それが私の問題の大部分を解決しました。私は残りの部分を把握できるかどうかを見ていきます。 – iancormac84

関連する問題