Have you tried just running the script per Chris' suggestion?

os.system() or the subprocess module

That way you can do the argument combination constructing outside of
executing.

Alternatively, if you need to test some internal then I would think you can
just import the module and skip the options parsing (i.e. don't call
start() ).  Of course you then have to call the parts you want to inspect
with the appropriate variables.

Either way, seems like you can introduce code into the package/mods
wherever you need to log/test.

Trying to interface not using the author's interface seems like a quick
path to giving yourself a headache.


On Mon, Oct 7, 2013 at 5:12 PM, Maria McKinley <[email protected]>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 get this:
>
> Usage: -stest [options]
>
> -stest: error: Please specify a subject ID with '-s'.
>
> 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 <[email protected]> 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" <[email protected]>
>> 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. <[email protected]> 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 <[email protected]
>>>> > 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 checks to
>>>>> see if __main__ was called, and before I run the method start(), which
>>>>> loads their stuff, but not sure what. I also know that they are using
>>>>> optparse to check the options.
>>>>>
>>>>> This is for unit testing, so alternatively if there is a sensible way
>>>>> to unit test scripts with command line options, that would work, but that
>>>>> seems trickier. And honestly, the way this package is set up, not sure how
>>>>> far I'm really going to get with unit testing, at all. :-(
>>>>>
>>>>> And no, in case you are wondering, I'm not excited about using this
>>>>> package, but I don't have a choice in the matter. For the curious, here is
>>>>> the package.
>>>>>
>>>>> http://memory.psych.upenn.edu/PandaEPL
>>>>>
>>>>> Thanks,
>>>>> Maria
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Maria Mckinley
>>> Software Developer with Bonus SysAdmin Experience
>>> www.mariakathryn.net
>>> www.linkedin.com/in/mariamckinley
>>>
>>
>
>
> --
> Maria Mckinley
> Software Developer with Bonus SysAdmin Experience
> www.mariakathryn.net
> www.linkedin.com/in/mariamckinley
>

Reply via email to