2011-12-02 78 views
13

我有一个函数:的Python 2.7 argparse

def x(a,b,c)

我怎么能收集适合这种模式在命令行中的变量值?

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

+1

有什么问题吗? –

回答

39

你可以做这样的事情是这样的:

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] 

要使用the argparse module,通常需要从main函数(以及一些调用它的样板)开始。在main函数中,您需要create an ArgumentParser。之后,你会想添加一些参数。

要添加参数,请使用add_argument

parser.add_argument('-x', '--x-center', type=float, required=True) 

在这里,我们要添加一个选项,-x,其中也有一个长选项变型,--x-center。我们传给add_argumenttype告诉它要求它是一个float(如果它不是有效的浮点数,则会出错)。我们还告诉​​它是必需的;如果没有提供,错误。

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

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

最后,我们用parse_args解析命令行。这返回一个我们要存储的对象。

然后,您可以访问该对象上的选项和参数,并在您的程序中执行相关的操作。

+0

行x(args.x_center,args.y_center,args.values) 必须更改为 x(args.x,args.y,args.values)才能正确运行 –

+0

@VasileiosAntoniou:您确定吗? ?该代码对我来说是按原样工作的,并使您的更改能够打破它。 – icktoofay

+0

是的,我确定,但没关系。至少我们都有一个运行代码! :) –