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 <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 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