我有一个功能:
def x(a,b,c)
如何从命令行收集适合此模式的变量值?
python test.py --x_center a --y_center b c
(c
例如,具有 3、4 或更多值)
你可以这样做:
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='*')
这就像以前一样,但由于我们传递给它的字符串不是以破折号开头,它假定它不是一个选项,而是一个非选项参数。同样,我们告诉它我们想要float
s。nargs
允许您指定它需要多个参数。*
指定我们需要任意数量的参数。
最后,我们用parse_args
. 这将返回一个我们将存储的对象。
You can then access the options and arguments on that args
object and do relevant things in your program.