Подтвердить что ты не робот

Python 2.7 argparse

У меня есть функция:

def x(a,b,c)

Как я могу собирать значения переменных из командной строки, которые соответствуют этому шаблону?

python test.py --x_center a --y_center b c (c имеет, например, 3, 4 или более значения)

4b9b3361

Ответ 1

Вы можете сделать что-то вроде этого:

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. Это возвращает объект, который мы будем хранить.

Затем вы можете получить доступ к параметрам и аргументам этого объекта args и сделать соответствующие вещи в своей программе.