[Python-Dev] unittest argv (original) (raw)

John Keyes john at integralsource.com
Mon May 1 19:11:50 CEST 2006


On 5/1/06, Guido van Rossum <guido at python.org> wrote:

Wouldn't this be an incompatible change? That would make it a no-no. Providing a dummy argv[0] isn't so hard is it?

It would be incompatible with existing code, but that code is already broken (IMO) by passing a dummy argv[0]. I don't think fixing it would affect much code, because normally people don't specify the '-q' or '-v' in code, it is almost exclusively used on the command line.

The only reason I came across it was that I was modifying an ant task (py-test) so it could handle all of the named arguments that TestProgram.init supports.

If the list index code can't change, at a minimum the default value for argv should change from None to sys.argv.

Are the tests for unittest.py?

Thanks, -John K

On 4/30/06, John Keyes <john at integralsource.com> wrote: > Hi, > > main() in unittest has an optional parameter called argv. If it is not > present in the invocation, it defaults to None. Later in the function > a check is made to see if argv is None and if so sets it to sys.argv. > I think the default should be changed to sys.argv[1:] (i.e. the > command line arguments minus the name of the python file > being executed). > > The parseArgs() function then uses getopt to parse argv. It currently > ignores the first item in the argv list, but this causes a problem when > it is called from another python function and not from the command > line. So using the current code if I call: > > python mytest.py -v > > then argv in parseArgs is ['mytest.py', '-v'] > > But, if I call: > > unittest.main(module=None, argv=['-v','mytest']) > > then argv in parseArgs is ['mytest'], as you can see the verbosity option is > now gone and cannot be used. > > Here's a diff to show the code changes I have made: > > 744c744 > < argv=None, testRunner=None, testLoader=defaultTestLoader):_ _> --- > > argv=sys.argv[1:], testRunner=None, testLoader=defaultTestLoader): > 751,752d750 > < if argv is None:_ _> < argv = sys.argv_ _> 757c755 > < self.progName = os.path.basename(argv[0])_ _> --- > > # self.progName = os.path.basename(argv[0]) > 769c767 > < options, args = getopt.getopt(argv[1:], 'hHvq',_ _> --- > > options, args = getopt.getopt(argv, 'hHvq', > > You may notice I have commented out the self.progName line. This variable > is not used anywhere in the module so I guess it could be removed. To > keep it then conditional check on argv would have to remain and be moved after > the self.progName line. > > I hope this makes sense, and it's my first post so go easy on me ;) > > Thanks, > -John K _> ________________________ > Python-Dev mailing list > Python-Dev at python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org >

-- --Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list