Thanks everyone!
I gave up on sys.argv and opted to not try to import my module into my test
script, so not trying to change the options after the fact, so as to speak.
Now I am just running the python script using the os.system call from the
unittest, and that is working. It is going to take a while to figure out
the best way in general to run unit tests on this code. I like Matt's
suggestion of just importing what I need from their code to run a
particular test, but that could get pretty complicated. But, heh, I'm
making VR games in python, so it's all good!

cheers,
Maria


On Mon, Oct 7, 2013 at 7:46 PM, Christopher Barker <python...@gmail.com>wrote:

>
>
> On Monday, October 7, 2013, Maria McKinley wrote:
>
>> So, they are using optparse. Is there a way to take advantage of this?
>>
>> When I tried to use the sys.argv=[], I found that having the first option
>> None gave me a  TypeError. If I used:
>>
>> import sys
>> sys.argv = ['-stest']
>>
>>
>  I'd use sys.arv.extend or .append, rather than replace it. So the first
> arg is right.
>
>> I get this:
>>
>> Usage: -stest [options]
>>
>> -stest: error: Please specify a subject ID with '-s'.
>>
>> That sure looks like there is supposed to be a space between the s and
> test: -s test
>
>  or -stest subject_id
>
> MAke sure you can run it on the command line the way you want before
> emulating it.
>
> So it might be:
>
> sys.argv.append('-s')
> sys.argv.append('Id')
>
> HTH
>
> Chris
>
>
>
> Does this make sense to anyone? Same results for sys.argv.extend
>>
>>  I've put the relevant bits of the full trace for the TypeError below
>> (that was the only time I got a full trace).
>>
>> ~m
>>
>> DirectStart: Starting the game.
>> Warning: NodePathCollection.asList() is no longer needed and deprecated.
>>  Iterat
>> e on the collection directly instead.
>> Known pipe types:
>>   wglGraphicsPipe
>> (all display modules loaded.)
>> Traceback (most recent call last):
>>   File "test_goBananas.py", line 2, in <module>
>>     import goBananas
>>   File "c:\Users\eblab.WANPRC\panda\goBananas\goBananas.py", line 35, in
>> <module
>> >
>>     goBananas().start()
>>   File "c:\Users\eblab.WANPRC\panda\goBananas\goBananas.py", line 11, in
>> __init_
>> _
>>     exp = epl.Experiment.getInstance()
>>   File
>> "c:\Panda3D-1.8.1\python\lib\site-packages\pandaepl\Experiment.py", line
>> 86, in getInstance
>>     Experiment.singletonInstance = Experiment()
>>   File
>> "c:\Panda3D-1.8.1\python\lib\site-packages\pandaepl\Experiment.py", line
>> 51, in __init__
>>     Options.getInstance().error("Please specify a subject ID with '-s'.")
>>   File "c:\Panda3D-1.8.1\python\lib\optparse.py", line 1582, in error
>>     self.print_usage(sys.stderr)
>>   File "c:\Panda3D-1.8.1\python\lib\optparse.py", line 1602, in
>> print_usage
>>     print >>file, self.get_usage()
>>   File "c:\Panda3D-1.8.1\python\lib\optparse.py", line 1588, in get_usage
>>     self.expand_prog_name(self.usage))
>>   File "c:\Panda3D-1.8.1\python\lib\optparse.py", line 1565, in
>> expand_prog_name
>>
>>     return s.replace("%prog", self.get_prog_name())
>>   File "c:\Panda3D-1.8.1\python\lib\optparse.py", line 1560, in
>> get_prog_name
>>     return os.path.basename(sys.argv[0])
>>   File "c:\Panda3D-1.8.1\python\lib\ntpath.py", line 198, in basename
>>     return split(p)[1]
>>   File "c:\Panda3D-1.8.1\python\lib\ntpath.py", line 170, in split
>>     d, p = splitdrive(p)
>>   File "c:\Panda3D-1.8.1\python\lib\ntpath.py", line 125, in splitdrive
>>     if p[1:2] == ':':
>> TypeError: 'NoneType' object has no attribute '__getitem__'
>>
>>
>>
>> On Mon, Oct 7, 2013 at 4:28 PM, Rohit Patnaik <quanti...@gmail.com>wrote:
>>
>> Can you see how they're getting the command line options? The sensible
>> thing would be to use something like optparse, but from your description, I
>> suspect they're not doing the sensible thing.
>>  On Oct 7, 2013 4:22 PM, "Maria McKinley" <mar...@mariakathryn.net>
>> wrote:
>>
>> I couldn't get either the sys.argv.extend or sys.argv = [None...] to
>> work. I just keep getting the error to specify that option. They do specify
>> it kind of strangely. the option is script.py -sName
>> which I've never seen before. They just kind of run the option name and
>> the argument together. I tried all kinds of variations
>> '-sname'
>> '-s', 'name'
>> '-s=name'
>> 's=name'
>>
>> Nothing works. This library doesn't seem to have an option for running it
>> directly from the python API. I'm thinking their library was not tested
>> with actual test code. Meh.
>>
>> I'm contemplating mucking with their code to set a default for their
>> 'mandatory' option, but I'd really rather not do that.
>>
>> And yes, testing it as a script would not be unit testing. I'm not sure
>> what I was imagining there. ;-)
>>
>> thanks,
>> Maria
>>
>>
>> On Mon, Oct 7, 2013 at 4:08 PM, Matt S. <sleepingb...@gmail.com> wrote:
>>
>> Chris beat me to the punch but here's what I was thinking...
>>
>> http://docs.python.org/2/library/optparse.html
>>
>> 15.5.3.7 Parsing arguments
>>     (options, args) = parser.parse_args(args=None, values=None)
>>
>>
>>
>> where the input parameters are
>>    args -- the list of arguments to process (default: sys.argv[1:])
>>
>>
>> It looks to me like you just need to emulate sys.argv[1:].
>>
>> ./myscript.py -a val1 -b val2
>>
>>
>> Maybe a bad idea but I think if you import sys and then define sys.argv
>> as a list whose first item is going to be ignored:
>>
>> if __name__=='__main__':
>>
>>     sys.argv = [None, "-a", "val1", "-b", "val2"]
>>
>>     start()
>>
>>
>>
>>
>>
>>
>>
>> On Mon, Oct 7, 2013 at 3:31 PM, Maria McKinley 
>> <mar...@mariakathryn.net>wrote:
>>
>> I am using a python package that has a required command line option I am
>> suppose to use when I invoke my script if I am using their library. Kind of
>> weird, I know, I love required options! I want to load my class from the
>> python interpreter for testing purposes. Is there a way to specify options
>> from the python interpreter? I know that __main__ is run from the command
>> line, so I should be able to add stuff in an if statement that ch
>>
>>
>
> --
> Christopher Barker, PhD
>
> Python Language Consulting
>   - Teaching
>   - Scientific Software Development
>   - Desktop GUI and Web Development
>   - wxPython, numpy, scipy, Cython
>
>


-- 
Maria Mckinley
Software Developer with Bonus SysAdmin Experience
www.mariakathryn.net
www.linkedin.com/in/mariamckinley

Reply via email to