News wrote:
> Hi Everyone,
> 
> 
> The attached code creates client connections to websphere queue managers
> and then processes an inquiry against them.
> 
> The program functions when it gets options from the command line.
> 
> It also works when pulling the options from a file.
> 
> My issue is that it only processes the first line of the file.
> 
> Does anyone know why this might be the case?
> 
> The use_file() function should be returning each file line.
> 
> Any help you can provide on this would be greatly appreciated.
> 
> Thanks
> 
> 
(snip)
> 
> #
> # Read a file into a list

Hint : use docstrings for this kind of comments.

> def use_file():
>       myfile = open(options.filename)

1/ options.filename should be passed as an argument. Globals are
definitively evil and should be avoided by all means.

2/ open() may raise an error. You may (or not) want to handle this error
 here.

>       while True:
>               line=myfile.readline()
>               print line

Why this print statement ? debug ?

>               if len(line) == 0:
>                       myfile.close()
>                       break
>               else:
>                       return line

This of course will read only the first line. The return statements
terminates execution of the function. And BTW:

>       myfile.close()  

... This will never execute.
        
(snip)

>     if options.filename is not None:
>           line = use_file()
>           (options,args) = parser.parse_args(line.split())

Using it that way wouldn't work anyway... and may have unexpected
results, since you're overwriting the existing options object.

>           check_params()
>     else:
>           check_params()


Since you call check_params() anyway, it would simpler to write it:

if options.filename is not None:
  do_someting_with_options_here()
check_params()


Now for your question:

if options.filename is not None:
  try:
    f = open(options.filename)
  except IOError, e:
    # stdout is for normal program outputs only,
    # error messages should go to stderr
    print >> sys.stderr, \
      "failed to open options file %s : %s" \
      % (options.filename, e)
    sys.exit(1)
  for line in f:
    # pass the existing options object in,
    # so it's updated with the new args instead of
    # being overwritten
    options, args = parser.parse_args(line.split(), options=options)
  f.close()
  del f
check_params()

BTW, check_params() should also takes the options object as argument.
Globals are evil. Definitively. Also, and if I may suggest,
check_options() would be a better name IMVHO.

And while we're at it, you're once again in a bad case of reinventing
the SquareWheel(tm) with the usage() function - optparse takes care of this:
http://docs.python.org/lib/optparse-generating-help.html

        
(snip)
            if options.quiet is False:
You'd better not identity test against True or False. There are lot of
expressions that evaluate to True or False in a boolen context, without
actually *being* neither the True object nor the False object.

-> if not options.quiet:


(snip)

HTH
-- 
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '[EMAIL PROTECTED]'.split('@')])"
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to