Приложенията от командния ред са един от най-старите и най-използваните видове приложения. Ако сте опитен потребител на Linux, може да не сте използвали GUI инструменти вместо инструменти на командния ред, за да направите същата задача. Например, Anaconda, мениджърът на пакети за python, разполага с инструменти на командния ред на име Conda и GUI инструмент с име anaconda navigator.
Нещото, което прави приложението на командния ред популярно сред разработчиците, е, че те консумират много малко ресурси в сравнение с неговия графичен интерфейс и осигуряват по-добра производителност.
Python е прост и мощен език за изграждане на приложения от командния ред. Той предоставя тонове библиотеки, вече написани от много велики програмисти, което улеснява нашата задача, тъй като не е необходимо да пренаписваме същия код.
В този урок ще ви представя библиотеката Argparse на python, която може да анализира аргументи на приложенията от командния ред. Това е полезно за изграждане на страхотни интерфейси на командния ред. За да следвате този урок, се препоръчва да имате инсталирана най-новата версия на python. Имаме и урок стъпка по стъпка за актуализиране на python до най-новата версия в Linux.
Въведение
Разбор на аргументи е важна концепция, която трябва да използваме, за да изградим мощни и удобни за потребителя интерфейси на командния ред. Ако сте използвали приложения от командния ред по-рано, може би сте забелязали, че можем да добавяме аргументи към приложенията от командния ред, за да конфигурираме опциите на инструмента.
Например, ако сте използвали ls команда в Linux, която се използва за изброяване на текущите работни елементи на директория, може да сте видели нещо подобно, както е показано на изображението по-долу.
Както можете да видите на изображението, в него са изброени елементите в текущата директория. Можем да използваме и ls командвайте по-изгодно, като му дадете аргумент, както направих в следващата команда.
ls -a
След като въведете тази команда в терминала, тя ще изброи всички елементи, налични в текущата работна директория, включително скритите елементи. Както можете да видите, като предоставим аргументи на командата, ние можем лесно да посочим опции за командата по приятелски начин. Тук аргументите влизат в сила. Те правят приложенията от командния ред по-полезни и по-удобни.
Може би се чудите кога и как да добавите аргументи от командния ред във вашите приложения. Представете си, че създавате приложение, което се нуждае от потребителско въвеждане на името на файла, което приложението ще обработва.
Можем да го направим по два начина:
- като подканите потребителя да добави името на файла или
- като предоставите на потребителя да добави името на файла като аргумент към командата.
Първият трик е добър, но вторият е по-полезен, тъй като потребителят може да даде всички опции с една команда, което го прави по-удобен за потребителя.
Python включва страхотна библиотека, наречена „argparse“, която е полезна за създаване и анализиране на аргументи от командния ред и може да изгради много лесно мощни интерфейси на командния ред за потребителите. Нека да се потопим дълбоко в библиотеката на argparse на python.
Библиотека Argparse
The argparse библиотеката е лесен и полезен начин за анализиране на аргументи при изграждане на приложения от командния ред в python. Въпреки че има и други аргументи, анализиране на библиотеки като optparse, getopt, и т.н., на argparse библиотеката е официално препоръчителният начин за анализиране на аргументи от командния ред.
Той е наличен и в стандартната библиотека на python, така че не се нуждаем от ръчна конфигурация. The argparse библиотеката е изградена с помощта на optparse библиотека на python, но argparse е по-полезен и удобен за разработчици от optparse библиотека.
Практическа демонстрация на Argparse
Нека видим практическа демонстрация за това как да използваме библиотеката argparse за създаване на прост интерфейс на командния ред. Тази програма ще приеме път и ще провери дали пътят съществува или не и ако съществува, след това отпечата дали е файл или директория.
import os import argparse parser = argparse.ArgumentParser ('description = "Проверка на съществуването на пътя") парсер.add_argument ("- път", помощ = "въведете път, за да проверите дали съществува") args = парсер.parse_args () input_path = args.път, ако os.път.isdir (input_path): print ("Пътят съществува и това е директория") elif os.път.isfile (input_path): print ("Пътят съществува и това е файл") else: print ("Пътят не съществува")При стартиране на горната програма можем да проверим дали пътят съществува или не. Можете също да използвате -з аргумент с програмата, който е аргументът по подразбиране за показване на съобщения за помощ. Позволете ми да ви обясня как работи горната програма. В първите два реда импортирахме модулите, които ще са ни необходими в програмата. The операционна система модул е импортиран, за да се провери дали пътят съществува или не и дали е файл или директория. Ако искате да научите повече за операционна система модул, можете да се обърнете към нашето ръководство за работа с os в python.В следващия ред импортирахме библиотеката argparse, необходима за създаване и анализиране на аргументи. В третия ред създаваме обект на парсер, използвайки клас ArgumentParser на библиотеката argparse. Този клас приема и незадължително описание на параметъра, което ще бъде показано в съобщението за помощ.В следващия ред създадохме аргумент, наречен path, използвайки метода add_argument () на обекта на синтактичния анализатор и даваме подробностите в помощния параметър, който ще бъде показан в съобщението за помощ, както видяхме в изхода по-рано.След това анализираме аргументите, като използваме метода parse_args () на обекта на парсер и имаме достъп до потребителския път за вход като аргумент. Получихме пътя, който потребителят въведе в аргумента и след това го използвахме с os модула, за да проверим дали е файл или папка. Ако не е сред двете, ще отпечата, че пътят не съществува.
Персонализиране
Нека видим някои от персонализациите, които можем да направим с нашия интерфейс на командния ред с помощта на библиотеката argparse.Помощ за персонализирано използване
Когато стартираме демонстрационната програма, която създадохме по-рано с -з параметър, получаваме помощта на програмата като изход, който генерира библиотеката argparse. Ако забележите съобщението за помощ, в горния ред има помощ за използване, която ни показва как да го използваме.В нашата демонстрационна програма имаме стандартна помощ за използване. Все още можем лесно да го персонализираме, като използваме параметъра за използване, докато създаваме обекта на синтактичен анализатор с помощта на класа ArgumentParser (). Погледнете кода по-долу, който ще бъде модифициран в нашата демо програма.парсер = argparse.ArgumentParser (описание = "Проверка на съществуването на пътя", употреба = "cla.py път ")Ето резултата: Както можем да видим в изхода, помощта за използването е променена на тази, която посочваме в параметъра за използване на класа ArgumentParser ().
Персонализиране на аргументи
Можем също така да използваме библиотеката Argparse, за да персонализираме аргументите, като например дали аргументите ще бъдат необходими или не, като даваме на аргумент стойност по подразбиране.
Добавяне на стойност по подразбиране
Можем да дадем на аргументите стойност по подразбиране, като използваме параметъра по подразбиране на add_argument () метод. Например вижте кода по-долу.
import os import argparse parser = argparse.ArgumentParser (описание = "Проверка на съществуването на пътя", употреба = "cla.py path ") парсер.add_argument ("- път", help = "въведете път, за да проверите дали съществува", по подразбиране = "име на файл.txt ") args = парсер.parse_args () input_path = args.път, ако input_path == Няма: изход () elif os.път.isdir (input_path): print ("Пътят съществува и това е директория") elif os.път.isfile (input_path): print ("Пътят съществува и това е файл") else: print ("Пътят не съществува")
При стартиране на горната програма без никакъв аргумент ще получим изхода по-долу. Както е показано в изхода, програмата проверява пътя име на файл.текст, което задаваме в параметъра по подразбиране.
Задаване на изисквания за аргументи
Също така можем да използваме библиотеката Argparse, за да зададем изискванията на аргумента, т.е.д., дали аргументите ще са необходими или не. За целта трябва да използваме необходимия параметър, както е показано в кода по-долу.
import os import argparse parser = argparse.ArgumentParser (описание = "Проверка на съществуването на пътя", употреба = "cla.py path ") парсер.add_argument ("- път", help = "въведете път, за да проверите дали съществува", по подразбиране = "име на файл.txt ", задължително = Вярно) args = парсер.parse_args () input_path = args.път, ако input_path == Няма: изход () elif os.път.isdir (input_path): print ("Пътят съществува и това е директория") elif os.път.isfile (input_path): print ("Пътят съществува и това е файл") else: print ("Пътят не съществува")
При стартиране на горния код без никакви аргументи, ще получите грешка, казвайки, че са необходими следните аргументи.
Тип аргумент
Можем също така да зададем типа данни, използван в аргумента. Например, ако се нуждаем от пътя, трябва да дадем низ тип данни. Ако потребителят въведе тип данни, който не е низ, Argparser ще го промени в низ. За да зададете типа по подразбиране за аргумент, изпълнете кода по-долу.
import os import argparse parser = argparse.ArgumentParser (описание = "Проверка на съществуването на пътя", употреба = "cla.py path ") парсер.add_argument ("- path", help = "въведете път, за да проверите дали съществува", type = str) args = parser.parse_args () input_path = args.път, ако input_path == Няма: изход () elif os.път.isdir (input_path): print ("Пътят съществува и това е директория") elif os.път.isfile (input_path): print ("Пътят съществува и това е файл") else: print ("Пътят не съществува")
Изход:
Заключение
Това е само основата на синтактичния анализ на аргументи с помощта на библиотеката Argparse. След като преминете през този урок, се препоръчва да прочетете официалната документация, за да проучите повече трикове за използване на тази библиотека. Може също да искате да видите публикацията за използване на регистрация в python, което е много полезно за писане на големи приложения и лесно отстраняване на грешки.