Въведение
В този блог ще проучим различните начини, по които можете да използвате модула argparse в Python за обработка на аргументи от командния ред във вашите програми.
Ако някога сте писали интерфейс на командния ред (CLI) в Python, знаете, че анализирането и обработката на аргументи на командния ред може да бъде досадна и податлива на грешки задача. За щастие, модулът argparse в стандартната библиотека на Python предоставя прост и мощен начин за справяне с тази задача.
В този блог ще покрием всичко, което трябва да знаете за argparse, от основите на дефиниране и анализиране на аргументи на командния ред до усъвършенствани техники за работа с по-сложни сценарии. До края на този блог ще имате цялостно разбиране за argparse и ще бъдете оборудвани със знанията и уменията, за да го използвате ефективно във вашите собствени програми.
Така че да започваме!
Първи стъпки с argparse
За да използвате модула argparse във вашата програма на Python, първо ще трябва да го импортирате подобно на други пакети на Python, т.е. import argparse
. След като импортирате argparse, можете да дефинирате аргументите на командния ред, които вашата програма ще приеме, като използвате обект ArgumentParser
. Този обект предоставя удобен начин за указване на аргументите, които вашата програма ще приеме, както и всички допълнителни опции или функции, които искате да включите.
Например, ето как можете да дефинирате прост ArgumentParser
обект, който приема един задължителен аргумент от командния ред:
В този пример filename
е името на аргумента на командния ред, а 'The name of the file to process'
е кратко описание, което ще се покаже на потребителя, когато програмата се изпълнява с флага -h
или --help
.
За да анализирате аргументите на командния ред, предадени на вашата програма, можете да използвате метода parse_args()
на обекта ArgumentParser
. Това ще анализира аргументите на командния ред и ще върне обект Namespace
, съдържащ стойностите на аргументите. В този пример обектът args
ще има атрибут filename
, който съдържа стойността на аргумента filename
, предадена на програмата.
Разширени техники за argparse
Досега разгледахме основите на използването на argparse за дефиниране и анализиране на аргументи на командния ред във вашите програми на Python. Argparse обаче е мощен и гъвкав модул, който може да се използва и за обработка на широк набор от по-напреднали сценарии.
Една усъвършенствана функция на argparse е възможността да се укаже броят на аргументите, които опцията на командния ред трябва да приеме, като се използва параметърът nargs
. Например, можете да използвате nargs='+'
, за да укажете, че дадена опция трябва да приема един или повече аргументи, или nargs='?'
, за да укажете, че дадена опция е незадължителна и трябва да приема нула или един аргумент.
Ето пример за това как можете да използвате параметъра nargs
, за да дефинирате опция на командния ред, която приема едно или повече имена на файлове:
В този пример опцията -f
или --files
ще приеме едно или повече имена на файлове, които ще бъдат съхранени в списък в атрибута files
на обекта Namespace
, върнат от parse_args()
.
Друга усъвършенствана функция на argparse е възможността за указване на стойности по подразбиране за опции. Това може да бъде полезно, ако искате да предоставите поведение по подразбиране за опция, ако тя не е посочена в командния ред. Например, можете да използвате параметъра default
, за да посочите стойност по подразбиране за опция:
В този пример опцията -o
или --output
по подразбиране ще бъде 'output.txt'
, ако не е указана в командния ред.
Сложен пример
import argparse parser = argparse.ArgumentParser(prog='myprogram', description='Process some files') # Required arguments parser.add_argument('input', help='The input file') parser.add_argument('output', help='The output file') # Optional arguments parser.add_argument('-v', ' - verbose', action='store_true', help='Enable verbose output') parser.add_argument('-o', ' - overwrite', action='store_true', help='Overwrite the output file if it exists') parser.add_argument('-n', ' - num-records', type=int, default=10, help='The number of records to process') # Mutually exclusive arguments group = parser.add_mutually_exclusive_group() group.add_argument('-u', ' - uppercase', action='store_true', help='Convert the output to uppercase') group.add_argument('-l', ' - lowercase', action='store_true', help='Convert the output to lowercase') # Arguments with choices parser.add_argument('-c', ' - compression', choices=['gzip', 'bzip2', 'lzma'], help='The compression algorithm to use') # Positional arguments with variable number of inputs parser.add_argument(' - exclude', nargs='+', help='Exclude the specified files from processing') # Parse the command line arguments args = parser.parse_args()
Горният код импортира модула argparse
и създава ArgumentParser
обект, който ще се използва за анализиране и обработка на аргументи от командния ред за програма на Python.
Обектът ArgumentParser
се инициализира с аргумент prog
, който указва името на програмата, и аргумент description
, който предоставя кратко описание на програмата.
След това кодът дефинира редица аргументи на командния ред, използвайки метода add_argument()
на обекта ArgumentParser
. Методът add_argument()
приема редица незадължителни параметри, които могат да се използват за определяне на поведението и характеристиките на аргумента.
Първите два дефинирани аргумента са input
и output
, които са задължителни аргументи, които нямат никакви опции или флагове, свързани с тях. Тези аргументи са последвани от няколко незадължителни аргумента, които се идентифицират с водещи -
или --
и се определят с помощта на опциите -v
, -o
и -n
.
Кодът също дефинира група от взаимно изключващи се аргументи, използвайки метода add_mutually_exclusive_group()
и опциите -u
и -l
. Това означава, че само една от тези опции може да бъде зададена в даден момент.
След това кодът дефинира аргумент, който има фиксиран набор от възможности за избор, използвайки параметъра choices
и опцията -c
. Този аргумент може да бъде зададен само с една от трите стойности, изброени в параметъра choices
.
И накрая, кодът дефинира позиционен аргумент с променлив брой входове, използвайки параметъра nargs
и опцията -exclude
. Този аргумент може да бъде зададен с произволен брой стойности, които ще бъдат съхранени в списък.
След като всички аргументи са дефинирани, кодът използва метода parse_args()
на обекта ArgumentParser
, за да анализира аргументите на командния ред и да съхрани стойностите в обект Namespace
. След това този обект може да се използва за достъп до стойностите на аргументите в останалата част от програмата.
Алтернативни опции за argparse
Въпреки че argparse е мощен и широко използван модул за анализиране и обработка на аргументи от командния ред в Python, той може да не винаги е най-подходящият за всяка ситуация. Налични са редица алтернативни опции, които може да са по-подходящи за вашите специфични нужди.
Една популярна алтернатива на argparse е модулът docopt
, който ви позволява да дефинирате интерфейса на командния ред на вашата програма, като използвате прост и интуитивен синтаксис, базиран на естествен език. Например, ето как можете да дефинирате интерфейс на командния ред с помощта на docopt
:
""" Usage: myprogram.py [options] <input> <output> Options: -h, --help Show this screen -v, --verbose Enable verbose output -o, --overwrite Overwrite the output file if it exists """
В този пример docopt
ще анализира аргументите на командния ред и ще върне речник, съдържащ стойностите на аргументите.
Друг вариант, който трябва да разгледате, е модулът click
, който е мощна и гъвкава библиотека за изграждане на интерфейси на командния ред в Python. click
предоставя широк набор от функции и опции за персонализиране, включително поддръжка за подкоманди, автоматична помощ и съобщения за грешки и много други.
Заключение
В заключение, модулът argparse в стандартната библиотека на Python е мощен и гъвкав инструмент за анализиране и обработка на аргументи от командния ред във вашите програми на Python. Независимо дали създавате прост интерфейс на командния ред или по-сложно приложение, argparse предоставя набор от функции и опции за персонализиране, които могат да ви помогнат да се справите с широк набор от сценарии.
Следвайки насоките и примерите, предоставени в този блог, вече трябва да имате цялостно разбиране за това как да използвате argparse, за да дефинирате и анализирате аргументите на командния ред във вашите програми на Python. Независимо дали сте начинаещ или опитен разработчик, надявам се, че сте намерили този блог за ценен ресурс и че ви е помогнал да разберете по-добре възможностите на argparse.
Ще се видим в следващата публикация, пазете се!
~ Итън
Повече съдържание в PlainEnglish.io. Регистрирайте се за нашия безплатен седмичен бюлетин. Следвайте ни в Twitter, LinkedIn, YouTube и Discord .
Интересувате ли се от мащабиране на стартирането на вашия софтуер? Вижте Circuit.