A Portable Program-Launch Framework
With all of these different ways to start programs on different platforms, it can be difficult to remember what tools to use in a given situation. Moreover, some of these tools are called in ways that are complicated and thus easy to forget (for me, at least). I write scripts that need to launch Python programs often enough that I eventually wrote a module to try to hide most of the underlying details. While I was at it, I made this module smart enough to automatically pick a launch scheme based on the underlying platform. Laziness is the mother of many a useful module.
Example 5-25 collects
in a single module many of the techniques we’ve met in this chapter.
It implements an abstract superclass, LaunchMode, which defines what it means to
start a Python program, but it doesn’t define how. Instead, its
subclasses provide a run method
that actually starts a Python program according to a given scheme, and
(optionally) define an announce
method to display a program’s name at startup time.
Example 5-25. PP3E\launchmodes.py
############################################################### # launch Python programs with reusable launcher scheme classes; # assumes 'python' is on your system path (but see Launcher.py) ############################################################### import sys, os pyfile = (sys.platform[:3] == 'win' and 'python.exe') or 'python' def findPythonExe( ): try: # get path to python pypath = sys.executable # use sys in newer pys except ...