Аргументы командной строки Python
Python поддерживает программы, которые можно запускать из командной строки, в комплекте с аргументами командной строки. Это входной параметр, который необходимо передать скрипту при их выполнении, означает взаимодействие с интерфейсом командной строки для сценариев.
Предоставляемый модуль getopt, может анализировать параметры и аргументы командной строки Python.
Как происходит передача аргументов командной строки Python?
Команда ls часто используется для получения сводной информации о файлах и папках, находящихся в определенном каталоге.
Зачем использовать argparse?
Для общения между автором программы и пользователем, которое не требует углубления в код и внесения изменений в сценарий. Модуль предоставляет пользователю возможность вводить аргументы командной строки.
Доступ к аргументам командной строки
Модуль Python sys предоставляет доступ к аргументам командной строки через sys.argv. Он решает две задачи:
Модуль Python sys
Это базовый модуль, который с самого начала поставлялся с дистрибутивом Python. Это тот же подход, что и библиотека C, использующая argc / argv для доступа к аргументам. Модуль sys реализует аргументы командной строки в простой структуре списка с именем sys.argv.
Каждый элемент списка представляет собой единственный аргумент. Первый – sys.argv [0] – это имя скрипта Python. Другие элементы списка от sys.argv [1] до sys.argv [n] – аргументы командной строки от 2 до n. В качестве разделителя между аргументами используется пробел. Соответственно, значения аргументов, содержащие пробелы, должны быть заключены в кавычки.
Он хранит аргументы командной строки в списке; мы можем получить к нему доступ, используя sys.argv. Это очень полезный и простой способ читать аргументы командной строки как String.
import sys print(type(sys.argv)) print('The command line arguments are:') for i in sys.argv: print(i)
Модуль Python getopt
Модуль Python getopt расширяет разделение входной строки проверкой параметров. Основанный на функции getopt C, он позволяет использовать как короткие, так и длинные варианты, включая присвоение значений.
Очень похож на функцию C getopt() для анализа параметров командной строки. Полезен при анализе аргументов командной строки, когда мы хотим, чтобы пользователь ввел некоторые параметры.
import getopt import sys argv = sys.argv[1:] try: opts, args = getopt.getopt(argv, 'hm:d', ['help', 'my_file=']) print(opts) print(args) except getopt.GetoptError: # Print a message or do something useful print('Something went wrong!') sys.exit(2)
Модуль Python argparse
Предлагает интерфейс командной строки со стандартизованным выводом, тогда как первые два решения оставляют большую часть работы в ваших руках. argparse позволяет проверять фиксированные и необязательные аргументы с проверкой имени в стиле UNIX или GNU.
Это предпочтительный способ анализа аргументов командной строки. Он предоставляет множество опций, таких как позиционные аргументы, значение по умолчанию для аргументов, справочное сообщение, указание типа данных аргумента и т. д.
Упрощает написание удобных интерфейсов командной строки. Он автоматически генерирует справочные сообщения и сообщения об использовании и выдает ошибки, когда пользователь передает программе неверные аргументы.
getopt.getopt метод
Этот метод используется для анализа параметров командной строки и списка параметров.
getopt.getopt(args, options, [long_options])
args – это список аргументов, который необходимо проанализировать.
options – строка букв опций, которую сценарий хочет распознать, с опциями, требующими аргумента, за которым следует двоеточие (:).
long_options (по желанию) – это должна быть строка с именами длинных параметров, которые должны поддерживаться.
- Этот метод возвращает значение, состоящее из двух элементов, т.е. список пар (параметр, значение), список аргументов программы, оставшихся после удаления списка параметров.
- Каждая пара опция-значение возвращается как опция в качестве ее первого элемента с префиксом дефиса для коротких опций (например, ‘- x’) или двумя дефисами для длинных опций (например, ‘–long-option’).
Исключение getopt.GetoptError
Это исключение возникает, когда в списке аргументов обнаруживается нераспознанный параметр или когда какой-либо опции, требующей аргумента, не дается ничего.
Аргументом исключения является строка, указывающая причину ошибки. Атрибуты msg и opt дают сообщение об ошибке и соответствующий параметр.
#!/usr/bin/python import sys, getopt def main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) except getopt.GetoptError: print 'test.py -i -o ' sys.exit(2) for opt, arg in opts: if opt == '-h': print 'test.py -i -o ' sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print 'Input file is "', inputfile print 'Output file is "', outputfile if __name__ == "__main__": main(sys.argv[1:])
$ test.py -h $ test.py -h usage: test.py -i -o $ test.py -i BMP -o usage: test.py -i -o $ test.py -i inputfile Input file is " inputfile Output file is "
Как использовать?
Модуль | Применение | Версия Python |
---|---|---|
sys | Все аргументы в sys.argv (базовый) | Все |
argparse | Создать интерфейс командной строки | > = 2.3 |
docopt | Создать интерфейсы командной строки | > = 2,5 |
fire | Автоматически создавать интерфейсы командной строки (CLI) | Все |
optparse | Устарело |
Docopt используется для создания интерфейсов командной строки.
from docopt import docopt if __name__ == '__main__': arguments = docopt(__doc__, version='Example 1') print(arguments)
Python Fire автоматически генерирует интерфейс командной строки; вам нужна только одна строка кода. В отличие от других модулей, работает мгновенно. Не нужно определять никаких аргументов; все методы связаны по умолчанию.
Чтобы установить его, введите:
Определите или используйте класс:
import fire class Python(object): def hello(self): print("Hello") def openfile(self, filename): print("Open file '" + filename + "'") if __name__ == '__main__': fire.Fire(Python)
У вас есть варианты, соответствующие методам класса:
python example.py hello python example.py openfile filename.txt