我正在尝试将命令行参数解析为MayaVi2独立脚本。然而,mayavi2.standalone()
函数会在我之前吃掉命令行参数。例如:
#! /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()
帮助消息,而不是我自己的解析器。
从GitHub的mayavi2
模块的源代码中可以观察到,它在全局名称空间中有代码。部分代码将执行命令行解析。由于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()