Python получить параметры командной строки

Аргументы командной строки в Python

Практически все языки программирования поддерживают аргументы командной строки. Кроме того, у нас есть параметры командной строки для установки некоторых конкретных параметров программы.

Что такое аргументы командной строки в Python?

Аргументы командной строки Python – это входные параметры, передаваемые скрипту при их выполнении.

Есть много вариантов чтения аргументов командной строки в python. Три самых распространенных модуля:

Давайте рассмотрим простую программу, чтобы узнать, как читать и использовать аргументы командной строки в python.

Модуль sys

Модуль sys в Python хранит аргументы командной строки в списке, мы можем получить к нему доступ с помощью sys.argv. Это очень полезный и простой способ читать аргументы командной строки, как String. Давайте посмотрим на простой пример чтения и печати аргументов командной строки с использованием данного модуля.

import sys print(type(sys.argv)) print('The command line arguments are:') for i in sys.argv: print(i)

Изображение ниже иллюстрирует результат выполнения примера выполнения вышеуказанной программы:

Аргумент в командной строке

Модуль getopt

Модуль getopt очень похож по работе с функцией 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)

Приведенный выше пример очень прост, но мы можем легко расширить его для выполнения различных задач. Например, если передана опция справки, напечатайте какое-нибудь удобное сообщение и выйдите. Здесь модуль getopt автоматически проанализирует значение параметра и отобразит их. На изображении ниже показан пример выполнения.

Разбор аргументов командной строки в Python с использованием модуля дальнейшего сжатия

Модуль argparse

Модуль argparse является предпочтительным способом анализа аргументов командной строки. Он предоставляет множество опций, таких как позиционные аргументы, значение по умолчанию для аргументов, справочное сообщение, указание типа данных и т.д. В самой простой форме мы можем использовать его, как показано ниже.

import argparse parser = argparse.ArgumentParser() parser.parse_args()

Ниже приведены результаты быстрого запуска вышеуказанного сценария:

Аргументы командной строки python с использованием модуля argparse

Это все, что касается различных параметров чтения и анализа аргументов командной строки в python, вы должны решить, какой из них соответствует вашим конкретным требованиям, и затем использовать его.

Источник

Разбор параметров командной строки в Python

Разбор параметров командной строки в Python

При создании консольных программ в Python очень часто необходимо разобрать параметры (аргументы) передаваемые через командную строку, это можно сделать используя переменную argv из модуля sys, а так же с помощью модуля argparse из стандартной библиотеки Pyhton.

Читайте также:  What are HTML imports and how do they work

Второй способ более предпочтительный и удобный, далее ему мы уделим больше внимания.

Статья ниже не является полным описание всех возможностей модуля argparse, это просто общий обзор.

Ниже я иногда пишу аргументы командной строки, иногда параметры командной строки… Имеется ввиду одно и тоже 🙂

Получение параметров без использования argparse

Например, мы хотим написать программу после запуска выводящую в консоль «Привет ». Имя мы будем передавать через параметр в командной строке, далее его нужно получить в нашей программе. Как это сделать?

Мы можем сделать это используя стандартный модуль sys и его переменную argv, она содержит список переданных параметров (нулевой элемент списка содержит имя нашего скрипта).

Другими словами, чтобы вывести имя, которое мы передаем аргументом, необходимо обратиться к sys.argv[1]:

Сохраним код в файле hello.py и запустим его с параметром «Александр» (аргументом):

Но если попытаться запустить скрипт без параметра, то получаем ошибку поскольку в списке нет элемента с индексом 1. Исправим это сделав проверку на наличии передаваемого параметра и если он не передается, будет выводиться «Привет мир!»

import sys if len(sys.argv) == 1: print('Привет мир!') else: print(f'Привет ') 

Теперь немного усложним задачу, что если мы хотим передавать имя с помощью именованного параметра —name, доработаем наш код:

import sys if len(sys.argv) == 1: print('Привет мир!') else: p_name = sys.argv[1] p_value = sys.argv[2] if p_name == '--name': print(f'Привет ') else: print(f'Неизвесный параметр ') 

Запустив скрипт таким образом:

python hello.py —name Александр

Получаем нужный результат, если в место «—name» передать другое значение, то получаем предупреждение.

Но, если мы передадим один параметр вместо двух, то скрипт не запуститься, нам необходимо добавить еще один if для проверки существование минимум двух параметров.

А если нам нужно добавить еще несколько параметров, а если не все из них обязательные… короче код начнется превращаться в ужас, вот здесь нам на помощь и придет модуль argparse стандартной питоновской библиотеки.

Использование модуля argparse

Этот модуль облегчит нам разбор и дальнейшее использование передаваемых скрипту аргументов из командной строки.

Начнем переписывать наш пример:

import argparse parser = argparse.ArgumentParser() parser.add_argument('name', nargs='?', default='мир!') args = parser.parse_args() print(f'Привет ') 

Сохраним код в новый файл hello2.py и выполним передав ему в качестве параметра «Александр»:

python hello2.py Александр

Мы получим то, что требовалось:

Читайте также:  Pseudo class selectors css

Разберем подробнее строку:

parser.add_argument(‘name’, nargs=’?’, default=’мир!’)

В ней мы с помощью метода add_argument и передаваемых ему параметров, задали необязательный (для этого указали nargs=’?’) позиционный аргумент. Если аргумент не передается, то он принимает значение указанное в default.

Важно помнить, что при позиционных аргументах важен их порядок в момент, когда мы вызываем скрипт. Первый аргумент, переданный скрипту, становится первым позиционным аргументом, второй аргумент — вторым позиционным аргументом и т.д.

Продолжим доработку кода. Теперь мы хотим, чтобы Имя передавалось именованным параметром —name

Для этого всего лишь надо изменить одну строку создания аргумента

Теперь можно запустить скрипт с именованным параметром —name:

python hello2.py —name Александр

Мы получим «Привет Александр», а при отсутствии параметра, будет выводится значение по умолчанию «Привет мир».

У названия параметра может быть краткая форма, она записывается с одним ««, например:

parser.add_argument(‘-n’, ‘—name’, default=’мир!’)

А что если в качестве параметра —name мы заходим передать Имя + Фамилия?

python hello2.py —name Александр Третьяков

Выполнив это сейчас мы получим ошибку error: unrecognized arguments: Третьяков поскольку модуль argparse решил что фамилия это отдельный аргумент.

Чтобы поправить ситуацию, используем дополнительный параметр метода add_argument — nargs со значением «+», который обозначает, что мы ожидаем одно или более значений аргумента.

Теперь повторно вызвав скрипт, получим все переданные параметры в виде списка:

Привет [‘Александр’, ‘Третьяков’]

Выбор агрументов из определенных вариантов

Иногда может потребоваться, чтобы пользователь программы указал аргумент из заранее заданных вариантов (например нужно указать расширение конвертируемого файла или качество сохраняемого видео).

Если брать наш пример выше, можем добавить, чтобы скрипт принимал только определенные имена: Александр, Екатерина, Татьяна, Евгений. Для этого добавим в метод add_argument параметр choices, в котором укажем список возможных значений параметра (в нашем случае список имен).

parser.add_argument (‘-n’, ‘—name’, choices=[‘Александр’, ‘Екатерина’, ‘Татьяна’, ‘Евгений’])

Теперь при вызове скрипта мы должны обязательно указать параметр —name со значением из этого списка иначе возникнет ошибка:

python hello2.py —name Екатерина

А если попробуем передать имя не из одобренного списка:

hello2.py: error: argument -n/—name: invalid choice: ‘Ольга’ (choose from ‘Александр’, ‘Екатерина’, ‘Татьяна’, ‘Евгений’)

Справка (помощь) по аргументам

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

Для этого мы можем оформить справку для программы, которая будет вызываться аргументом —help или -h. В справочной информации мы сможем указать название и версию программы, копирайт, описание того, что она делает, и список ожидаемых параметров.

Читайте также:  Link to object java

Итак изменим 2 строчки нашего кода, добавив в него справочную информацию:

parser = argparse.ArgumentParser( prog='Greeting Script', description='Программа, которая говорит "Привет"', epilog='(c) Информация об авторе программы' ) parser.add_argument ('-n', '--name', choices=['Александр', 'Екатерина', 'Татьяна', 'Евгений'], help='Список из имен, которые я могу приветствовать') 

Мы получим справку о нашей программе:

usage: Greeting Script [-h] [-n ] Программа, которая говорит "Привет" optional arguments: -h, --help show this help message and exit -n , --name Список из имен, которые я могу приветствовать (c) Информация об авторе программы 

Аргументы как флаги

А что если мы хотим сделать так, чтобы при указании флага -bye программа говорила нам «До свидания»?

parser.add_argument (‘-bye’, action=’store_const’, const=True, help=’Установите, если нужно ли прощаться с пользователем’)

В метод add_argument мы добавили 2 новых параметра. Первый — action, он предназначен для выполнения некоторых действий над значениями переданного аргумента. В нашем случае мы передали значение параметра action — store_const, оно обозначает, что если данный аргумент (‘-bye’) указан, то он всегда будет принимать значение, указанное в другом параметре метода add_argument — const. А если аргумент передан не будет, то его значение будет равно None.

Так же в конце скрипта добавим вывод «До свидания», в случае установленного флага -bye:

if args.bye: print ('До свидания')

Теперь если добавить флаг -bye при вызове скрипта:

python hello2.py —name Александр -bye

Привет Александр До свидания

Без добавления -bye мы получим просто:

Флаги со значениями True и False используются часто, поэтому для этих целей предусмотрено 2 специальных значения для параметра action: store_true и store_false.

Можно переписать наш код так:

parser.add_argument (‘-bye’, action=’store_true’, help=’Установите, если нужно ли прощаться с пользователем’)

Мы использовали store_true, т.е. если параметр ‘-bye’ передан, он примет значение True.

Кстати, выше мы увидели что для добавление второго, третьего и т.д. аргумента, нам нужно просто еще раз вызвать метод add_argument и передать ему значения параметра.

Окончательный код нашего файла hello2.py:

import argparse parser = argparse.ArgumentParser( prog='Greeting Script', description='Программа, которая говорит "Привет"', epilog='(c) Информация об авторе программы' ) parser.add_argument ('-n', '--name', choices=['Александр', 'Екатерина', 'Татьяна', 'Евгений'], help='Список из имен, которые я могу приветствовать') parser.add_argument ('-bye', action='store_true', help='Установите, если нужно ли прощаться с пользователем') args = parser.parse_args() print(f'Привет ') if args.bye: print ('До свидания') 

На этом все, думаю общее представление о модуле argsparse вы получили, подробнее о нем можно почитать в официальной документации https://docs.python.org/3/library/argparse.html.

Категории

Свежие записи

Источник

Оцените статью