13

我有一个功能:

def x(a,b,c)

如何从命令行收集适合此模式的变量值?

python test.py --x_center a --y_center b cc例如,具有 3、4 或更多值)

4

1 回答 1

41

你可以这样做:

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。我们type传递给add_argument它告诉它要求它是一个float(如果它不是一个有效的浮点数则错误)。我们还告诉argparse它是必需的;如果未提供,则错误。

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

这就像以前一样,但由于我们传递给它的字符串不是以破折号开头,它假定它不是一个选项,而是一个非选项参数。同样,我们告诉它我们想要floats。nargs允许您指定它需要多个参数。*指定我们需要任意数量的参数。

最后,我们用parse_args. 这将返回一个我们将存储的对象。

You can then access the options and arguments on that args object and do relevant things in your program.

于 2011-12-02T04:25:57.443 回答