I've created a wxPython launcher GUI, converted with py2exe, that starts 3 other programs. However, it also starts up three shell windows as well. My boss wants me to reduce the number of shell windows to 0 or 1.

    Currently, my program starts them using:
os.system("start \B [program name & arguments")

    And I convert it to an exe using this setup.py script:
# setup.py
from distutils.core import setup
import py2exe
setup(windows=["launcher.py"], zipfile=None)

    I've tried changing windows to console; that works (it only opens up one shell), but it also removes all graphics/text from the GUI. I'm thinking of trying:
1. Setting it to console, but importing certain wxPython libraries, or
2. Upgrading to subsystem commands and tacking on the CREATE_NO_WINDOW flag.
Option 2 looks like my best bet, but I'm unsure if the spawned programs will still run if the launcher's killed. (They need to.)

Any suggestions on how I can reduce the number of shells?

How low will we go? Check out Yahoo! Messengerís low PC-to-Phone call rates.