Python 2.7 argparse模块
我有一个函数:
def x(a,b,c)
我该怎么从命令行收集符合这个格式的变量值呢?
python test.py --x_center a --y_center b c
(c
可能有,比如说,3、4个或者更多的值)
1 个回答
42
你可以这样做:
import argparse
def x(x_center, y_center, values):
print "X center:", x_center
print "Y center:", y_center
print "Values:", values
def main():
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument('-x', '--x-center', type=float, required=True)
parser.add_argument('-y', '--y-center', type=float, required=True)
parser.add_argument('values', type=float, nargs='*')
args = parser.parse_args()
x(args.x_center, args.y_center, args.values)
if __name__ == '__main__':
main()
试试看:
$ python test.py --x-center 1 --y-center 2 3 4 5
X center: 1.0
Y center: 2.0
Values: [3.0, 4.0, 5.0]
要使用`argparse`模块,通常你需要先写一个main
函数(还有一些基础代码来调用它)。在main
函数里,你需要创建一个`ArgumentParser`。接下来,你需要添加一些参数。
添加参数时,你可以用add_argument
这个方法。
parser.add_argument('-x', '--x-center', type=float, required=True)
在这里,我们添加了一个选项-x
,它还有一个长选项--x-center
。我们传给add_argument
的type
参数告诉它这个选项需要是一个float
(如果不是有效的浮点数就会报错)。我们还告诉argparse
这个选项是必需的;如果没有提供,就会报错。
parser.add_argument('values', type=float, nargs='*')
这和之前的差不多,但因为我们传给它的字符串没有以破折号开头,它就认为这不是一个选项,而是一个非选项参数。我们再次告诉它我们想要float
类型。nargs
允许你指定它可以接受多个参数。*
表示我们想要任意数量的参数。
最后,我们用parse_args
来解析命令行。这会返回一个对象,我们会把它存起来。
然后你可以在这个args
对象上访问选项和参数,并在你的程序中做相关的事情。