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

Reply via email to