Python 2.7 argparse模块

14 投票
1 回答
13720 浏览
提问于 2025-04-17 07:31

我有一个函数:

def x(a,b,c)

我该怎么从命令行收集符合这个格式的变量值呢?

python test.py --x_center a --y_center b cc 可能有,比如说,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_argumenttype参数告诉它这个选项需要是一个float(如果不是有效的浮点数就会报错)。我们还告诉argparse这个选项是必需的;如果没有提供,就会报错。

parser.add_argument('values', type=float, nargs='*')

这和之前的差不多,但因为我们传给它的字符串没有以破折号开头,它就认为这不是一个选项,而是一个非选项参数。我们再次告诉它我们想要float类型。nargs允许你指定它可以接受多个参数。*表示我们想要任意数量的参数。

最后,我们用parse_args来解析命令行。这会返回一个对象,我们会把它存起来。

然后你可以在这个args对象上访问选项和参数,并在你的程序中做相关的事情。

撰写回答