It's probably a good thing you didn't study the source closely,
because it has a few bugs in it as posted! I had assumed that
os.path.isfile() would check whether the file existed, but it
doesn't, so I had to add a couple if os.path.exists()
statements. Also it seems that every if needs an else (in this
instance at least) to properly prompt for a filename or
directory. Live and learn, I guess!
Concerning OptionParser(), from what I've read, unused options are acceptable
and expected, and helps designate "options" (by definition
optional params), from actual "arguments" (or required
params). I was hoping that OptionParser() would be easier
than getopt(), because I was having problems with "index out
of range" when no filename was passed. It seemed
OptionParser() would fit perfectly for my needs (using the py
script from the command line with no options, with source
being supplied, and the rarer case, because I don't like to
type, with target also being supplied).
I'm wondering now if -s is actually being used implicitly by
python.exe? Unfortunately, both -s and -t are valid arguments
for that interpreter:
usage: c:\python26\python.exe [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
-h : print this help message and exit (also --help)
-i : inspect interactively after running script; forces a prompt even
if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-m mod : run library module as a script (terminates option list)
-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO : remove doc-strings in addition to the -O optimizations
-Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S : don't imply 'import site' on initialization
-t : issue warnings about inconsistent tab usage (-tt: issue errors)
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
see man page for details on internal buffering relating to '-u'
-v : verbose (trace import statements); also PYTHONVERBOSE=x
can be supplied multiple times to increase verbosity
-V : print the Python version number and exit (also --version)
-W arg : warning control; arg is action:message:category:module:lineno
-x : skip first line of source, allowing use of non-Unix forms of #!cmd
-3 : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix
file : program read from script file
- : program read from stdin (default; interactive mode if a tty)
arg ...: arguments passed to program in sys.argv[1:]
Other environment variables:
PYTHONSTARTUP: file executed on interactive startup (no default)
PYTHONPATH : ';'-separated list of directories prefixed to the
default module search path. The result is sys.path.
PYTHONHOME : alternate <prefix> directory (or <prefix>;<exec_prefix>).
The default module search path uses <prefix>\lib.
PYTHONCASEOK : ignore case in 'import' statements (Windows).
PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.
But I think if that were the case, I'd have to have -s or -t
before my script name at invocation. I'll keep beating
up on it to see if it will do what I want. :-)
Insomniac at large