Python 2.7 argparse - PullRequest
       6

Python 2.7 argparse

13 голосов
/ 02 декабря 2011

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

def x(a,b,c)

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

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

1 Ответ

41 голосов
/ 02 декабря 2011

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

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 с. nargs позволяет указать, что требуется более одного аргумента. * указывает, что мы хотим любое количество аргументов.

Наконец, мы анализируем командную строку с parse_args. Это возвращает объект, который мы будем хранить.

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

...