2014-09-15 2 views
0

Я пытаюсь проанализировать аргумент командной строки автономному скрипту MayaVi2. Однако функция mayavi2.standalone() доставляет мне аргументы командной строки. Например:автономный скрипт Mayavi2 с аргументами командной строки

#! /usr/bin/python 
import sys, argparse 
from mayavi.scripts import mayavi2 
from mayavi import mlab 

@mayavi2.standalone 
def view(): 
    mayavi.new_scene() 
    mlab.test_plot3d() 


def parseCmdLineArgs(): 
    parser = argparse.ArgumentParser(description='Simple plotting using MayaVi2') 
    parser.add_argument('--scale', dest='scale', action='store',help='Sets the axis scaling') 
    parser.set_defaults(scale=1.0) 
    args = parser.parse_args(sys.argv[1:]) 
    return args 

if __name__ == '__main__': 
    args=parseCmdLineArgs() 
    print "Scale=%g" % args.scale 
    view() 

Если вызов этот сценарий plot.py и запустить его как

$ plot.py -h 

Я получаю сообщение mayavi2.standalone() справки и не один для моего собственного парсера.

ответ

1

Из исходного кода модуля mayavi2 в GitHub наблюдается, что он имеет код в глобальном пространстве имен. Некоторые из кода будут выполнять синтаксический анализ командной строки. Поскольку код Python запускается сверху вниз, проблема может быть решена путем переупорядочения кода:

import sys, argparse 

def parseCmdLineArgs(): 
    parser = argparse.ArgumentParser(description='Simple plotting using MayaVi2') 
    parser.add_argument('--scale', dest='scale', action='store',help='Sets the axis scaling') 
    parser.set_defaults(scale=1.0) 
    args = parser.parse_args(sys.argv[1:]) 
    return args 

if __name__ == '__main__': 
    args=parseCmdLineArgs() 

from mayavi.scripts import mayavi2 
from mayavi import mlab 

@mayavi2.standalone 
def view(): 
    mayavi.new_scene() 
    mlab.test_plot3d() 


if __name__ == '__main__': 
    print "Scale=%g" % args.scale 
    view() 
Смежные вопросы