[EMAIL PROTECTED], "Greenberg <"@bag.python.org, 
"greenbergj\""@NOSPAM.xs4all.nl, [EMAIL PROTECTED], ">"@bag.python.org writes:

> [EMAIL PROTECTED] wrote:
> > * Doesn't the __main__() method automatically execute when I run
> > my python program?
>
> No, there is no special __main__ function, to the best of my
> knowledge.

Guido van Rossum has mused on the idiom of the 'main' function in modules:

    <URL:http://www.artima.com/weblogs/viewpost.jsp?thread=4829>

My idiom for this is:

=====
def __main__(argv=None):
    """ Mainline code for this program """

    from sys import argv as sys_argv
    if argv is None:
        argv = sys_argv

    foo = Foo(argv)     # Foo is the main thing I need
    exitcode = None
    try:
        foo.do_the_main_thing()
    except SystemExit, e:
        exitcode = e.code

    return exitcode

if __name__ == "__main__":
    import sys
    exitcode = __main__(argv=sys.argv)
    sys.exit(exitcode)
=====

The reason for the local 'sys' imports is that I can boilerplate this
code and not have to worry about whether the rest of the program
actually uses the 'sys' module.

The reason for parameterising 'argv', but defaulting it to the system
argv, is that I can unit-test the '__main__' function
programmatically, while still letting it pick up the real argv when
the program is run.

Same reason for catching SystemExit, and then going on to call
'sys.exit()' myself: it allows the __main__ function to be unit-tested
easily, while still letting me use 'sys.exit()' in my application code
whenever it makes sense.

Now, when I write unit tests for my program (i.e. a Python module
designed to be run as a command), it can still be imported safely into
my unit tests, and all the code gets covered by test cases except the
three-line stanza at the end.
Htag.pl 0.0.23 -  Simon Huggins <[EMAIL PROTECTED]>  Released under GPL
Copyright (C) 1999-2002 Project Purple. http://www.earth.li/projectpurple/

Got sigmatch == ^/home/bignose/\.sigs/news.*$

-- 
 \        "The right to search for truth implies also a duty; one must |
  `\     not conceal any part of what one has recognized to be true."  |
_o__)                                               -- Albert Einstein |
Ben Finney

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to