- Аргументы командной строки Python
- Как происходит передача аргументов командной строки Python?
- Зачем использовать argparse?
- Доступ к аргументам командной строки
- Модуль Python sys
- Модуль Python getopt
- Модуль Python argparse
- getopt.getopt метод
- Исключение getopt.GetoptError
- Как использовать?
- Передача параметров в скрипт Python из командной строки.
Аргументы командной строки 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
Передача параметров в скрипт Python из командной строки.
При запуске скриптов, часто требуется указать какие-то дополнительные параметры, которые будут использованы в ходе работы программы. Конечно, можно при помощи функции input() получить данные от пользователя и сохранить их в переменных. Как говорится, дело вкуса. Но вместо множественного вызова функции input() есть намного более элегантное решение. Это передача параметров в скрипт python, непосредственно в командной строке — в момент вызова программы. Как это сделать? Давайте разберемся.
Для начала, наберите небольшую программу в своем редакторе. Сохраните её в папке C:\PyScript под именем input_var.py. Разумеется, папку и файл можете назвать как угодно, но тогда не забудьте указать свои данные при вызове скрипта в командной строке.
1. #-*- coding: UTF-8 -*- 2. from sys import argv 3. 4. script, first, second, third = argv 5. 6. print ("Этот скрипт называется: ", script) 7. print ("Значение первой переменной: ", first) 8. print ("Значение второй переменной: ", second) 9. print ("Значение третьей переменной: ", third)
Как видите, программа очень маленькая. Но её вполне хватит для демонстрации способа передачи данных в скрипт. После того, как следуя приведенным выше инструкциям, вы набрали и сохранили программу, вызовите командную строку Windows. После этого укажите имя интерпретатора python, путь к вызываемому файлу и три значения, разделяя все пробелами, как на рисунке ниже:
Рис. 1 Передача данных в скрипт Python
Если у вас скрипт хранится в другой папке — укажите свой путь к нему. После этого нажмите клавишу Enter на клавиатуре. В результате вы должны увидеть следующее:
Рис. 2 Результат выполнения программы
А теперь давайте разберем, как же это все работает.
Во второй строке мы импортируем argv из модуля sys. Во многих языках переменных argv — стандартное имя. В этой переменной хранятся данных, которые вы передаете сценарию. Пока нам достаточно знать, что эта переменная работает как «контейнер», в котором мы можем передать данные скрипту.
В четвертой строке мы производим «распаковку» содержимого argv в переменные. Слово «распаковка» может показаться странным, но в данном случае оно наиболее подходит. Фактически, мы сообщаем интерпретатору Python, что он должен взять данные из argv и последовательно поместить их в переменные, которые мы указали с левой стороны. После этого мы можем работать с ними как с обычными переменными, которым присвоили значения.
Вы можете указать свои значения вместо «15 два 105», но число значений, которые вы передаете скрипту, должно строго соответствовать количеству переменных, в которые «распаковывается» содержимое argv. Иначе вы увидите сообщение об ошибке:
Рис. 3 Ошибка распаковки данных.
Это сообщение возникло потому что мы передали в скрипт Python недостаточно данных. Если конкретнее, то строка ValueError прямо сообщает, что необходимо 4 значения, но указано 3 (имя скрипта передается автоматически).
Не забывайте, что все данные, которые мы передаем в программу python являются строковыми значениями. Поэтому параметры «10» и «105» сначала необходимо преобразовать в числовой тип при помощи функции int(), а только потом использовать в математических операциях. Будьте внимательны!