2010-11-27 1 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) 

이 스크립트는 파이썬이 항상 어디 실행 파일을 찾아하는 알 수 있도록 현재 플래시 드라이브 문자 HOMEDRIVE의 값을 설정하는 배치 파일에서 실행됩니다. 내 문제는 Chromium Portable에서 새 탭을 열 것인지 아니면 Firefox Portable을 열 것인지, 브라우저가 닫힌 상태에서 각 프로세스가 끝나면 서버를 종료할지 여부를 결정하는 프로세스를 구현하는 방법을 모르겠다는 것입니다. 나는 서브 프로세스와 관련된 많은 링크들, 특히 how to wait for multiple child processes, how to kill a subprocessensuring subprocesses are dead on exiting python program을 보았다. 파이썬 3의 복사본에 pywin32, wmi, comtypes 및 psutil 패키지를 설치했습니다. 제발 도와주세요? 내 코드를 버려야 할 필요가 있다면 괜찮습니다. 나는 배우려고 노력하고 있어요. 미리 감사드립니다.

답변

0

원칙적으로 Popen 객체의 wait() 메소드를 사용할 수 있어야합니다. 이런 식으로 뭔가 :

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

(return subprocess.Popen(...로 종료하기 위해 시작 함수를 수정)하지만 그 최신 브라우저에서 작동하는 방법을 잘 모른다. 리눅스에서 Firefox가 주소를 열기 위해 호출되고 이미 Firefox가 열렸 음을 감지하면 새로운 프로세스는 URL을 이전 프로세스에 전달하고 즉시 종료합니다. 그런 종류의 일은 당신이하려는 일을 망칠 것입니다.

+0

감사합니다. 그게 내 문제의 대부분을 해결했습니다. 내가 나머지를 알아낼 수 있는지 알게 될거야. – iancormac84