Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Python

testing command line scripts that use optparse

 

 

Python python RSS feed   Index | Next | Previous | View Threaded


vmail at mycircuit

Dec 3, 2009, 3:18 PM

Post #1 of 2 (162 views)
Permalink
testing command line scripts that use optparse

Hi
I have a script like this:

def doit(input, output):
parser = OptionParser()
parser.add_option("-a", "--accounts", dest="accounts", default="all",
help="list available accounts")
...

(options, args) = parser.parse_args()


# main driver
if __name__ == "__main__":
import sys
doit(sys.stdin, sys.stdout)

that I would like to test like this:

def test_accounts(self):
input = """-aRoot"""
output = """Results"""
self.runtest(input, output)

def runtest(self, input, expected):
inputStream = cStringIO.StringIO(input)
actual = cStringIO.StringIO()
doit(inputStream, actual)
assert_equal(actual.getvalue(), expected)

But when running test_accounts, I get:
...
File "/usr/local/python2.6/lib/python2.6/optparse.py", line 1578, in error
self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))
File "/usr/local/python2.6/lib/python2.6/optparse.py", line 1568, in exit
sys.exit(status)
SystemExit: 2
-------------------- >> begin captured stdout << ---------------------
stdin <cStringIO.StringI object at 0x8bd5b30>

optparse expects a file object and gets a cStringIO.

What is the correct way to set up this ?
Thanks for your help.

Peter

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


jeanmichel at sequans

Dec 4, 2009, 7:31 AM

Post #2 of 2 (152 views)
Permalink
Re: testing command line scripts that use optparse [In reply to]

Peter wrote:
> Hi
> I have a script like this:
>
> def doit(input, output):
> parser = OptionParser()
> parser.add_option("-a", "--accounts", dest="accounts", default="all",
> help="list available accounts")
> ...
>
> (options, args) = parser.parse_args()
>
>
> # main driver
> if __name__ == "__main__":
> import sys
> doit(sys.stdin, sys.stdout)
>
> that I would like to test like this:
>
> def test_accounts(self):
> input = """-aRoot""" output = """Results"""
> self.runtest(input, output)
> def runtest(self, input, expected):
> inputStream = cStringIO.StringIO(input)
> actual = cStringIO.StringIO()
> doit(inputStream, actual)
> assert_equal(actual.getvalue(), expected)
>
> But when running test_accounts, I get:
> ...
> File "/usr/local/python2.6/lib/python2.6/optparse.py", line 1578, in
> error
> self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))
> File "/usr/local/python2.6/lib/python2.6/optparse.py", line 1568, in
> exit
> sys.exit(status)
> SystemExit: 2
> -------------------- >> begin captured stdout << ---------------------
> stdin <cStringIO.StringI object at 0x8bd5b30>
>
> optparse expects a file object and gets a cStringIO.
>
> What is the correct way to set up this ?
> Thanks for your help.
>
> Peter
>
It seems there is something wrong with the type of the paramaters given
to the doit function. We can't say more cause cause you remove the
related code of the doit function.

But the error seems pretty clear to me : "optparse expects a file object
and gets a cStringIO"

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

Python python RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.