Автор оригинала: Pankaj Kumar.
Эй, ребята! В этой статье мы рассмотрим модуль getopt, который поддерживает аргументы командной строки. Итак, давайте начнем.
Что такое модуль getopt?
Модуль getopt
-это анализатор аргументов командной строки, который поддерживает ту же функциональность, что и функция Unix getopt ()
. Его API разработан аналогично функции C getopt ().
В следующих демонстрациях мы будем использовать модуль sys | для чтения аргументов, переданных программе с помощью функции sys.argv , а затем использовать модуль getopt для анализа аргументов.
- sys.argv : Список аргументов командной строки
- len(sys.argv) : Количество аргументов командной строки.
import sys number=len(sys.argv) arguments=str(sys.argv) print ('The Number of arguments:', number, 'arguments.') print ('Argument List:', arguments)
Выход:
C:\Users\Tanushree Thapliyal\Desktop>py yess.py A1 B2 C3 D4 The Number of arguments: 5 arguments. Argument List: ['yess.py', 'A1', 'B2', 'C3', 'D4']
0-й индекс-это имя скрипта, и он учитывается в количестве аргументов.
Демонстрация функций модуля getopt
Давайте рассмотрим некоторые примеры модуля getopt здесь. Мы продемонстрируем некоторые из двух общих функций.
1. Анализ параметров командной строки и списка параметров с помощью getopt.getopt()
Функция getopt()
анализирует параметры командной строки и список параметров. Эта функция принимает три аргумента:
- args – это список передаваемых аргументов.
- shortopts – это строка букв параметров, которую скрипт хочет распознать.
- longopts – это список строк с именами длинных опций, которые должны поддерживаться.
Он возвращает список пар (опция,значение) и список аргументов программы, оставшихся после удаления списка опций.
import sys import getopt args=sys.argv[1:] inputfile = '' outputfile = '' try: opts, args = getopt.getopt(args,"hi:o:",["infile=","outfile="]) except getopt.GetoptError: print ('test.py -i-o ') sys.exit(2) for opt, arg in opts: if opt == '-h': print ('args.py -i -o ') sys.exit() elif opt in ("-i", "--infile"): inputfile = arg elif opt in ("-o", "--outfile"): outputfile = arg print ('Input file is "', inputfile) print ('Output file is "', outputfile)
Наряду с принятием полных аргументов как --infile
и --outfile
, мы также принимаем аргументы как -i
и -o
.
ЗАПИСКА: Приведенная выше демонстрация никоим образом не обрабатывает аргументы. Цель демонстрации-показать, как модуль getopt анализирует аргументы и облегчает нам работу со встроенными аргументами.
Здесь sys.argv[1:]
означает, что начальный индекс равен 1, потому что sys.argv[0] – это имя скрипта, к которому нам не нужен доступ.
СЛУЧАЙ 1 : Использование одного тире( ‘ – ‘) и коротких форм -i и -o.
Выход:
py python.py -i=abc.txt -o=xyz.txt Input file is " abc.txt Output file is " xyz.txt
СЛУЧАЙ 2: Использование двойного тире ( ‘ — ‘) и длинных форм аргументов
py python.py --infile=abc.txt --outfile=xyz.txt Input file is " abc.txt Output file is " xyz.txt
2. Синтаксический Анализ Стиля GNU С Помощью Функции gnu_getopt()
Функция getopt.gnu_getopt()
используется для синтаксического анализа стиля GNU. Его работа аналогична функции getopt ()
, за исключением того, что в этом случае по умолчанию используется сканирование в стиле GNU, что означает, что аргументы option и non-option могут быть смешаны.
import getopt import sys category = '1.0' fix = False output_file = 'abc.txt' print ('ARGV :', sys.argv[1:]) options, remainder = getopt.gnu_getopt(sys.argv[1:], 'o:f', ['output=','fix', 'category=']) print ('OPTIONS :', options) for opt, arg in options: if opt in ('-o', '--output'): output_filename = arg elif opt in ('-f', '--fix'): fix = True elif opt == '--category': category = arg print ('category :', category) print ('fix :',fix) print ('output :', output_file) print ('remaining :', remainder)
Выход:
py yess.py -f not_an_option --output foo ARGV : ['-f', 'not_an_option', '--output', 'foo'] OPTIONS : [('-f', ''), ('--output', 'foo')] category : 1.0 fix : True output : abc.txt remaining : ['not_an_option']
Мы также можем запустить этот код без передачи каких-либо аргументов-
ARGV : [] OPTIONS : [] category : 1.0 fix : False output : abc.txt remaining : []
Если в аргументе передается”—”, getopt прекращает обработку оставшихся аргументов в качестве параметров.
py yess.py -f -- --output foo ARGV : ['-f', '--', '--output', 'foo'] OPTIONS : [('-f', '')] category : 1.0 fix : True output : abc.txt remaining : ['--output', 'foo']
Обработка исключений с помощью getopt.GetoptError
Если распознанный параметр не найден в списке аргументов или если параметр, требующий аргумента, не задан, возникает ошибка исключения.
Модуль Python argparse является альтернативой, которая предоставляет интерфейс командной строки с меньшим количеством кода и большим количеством справочных и информативных сообщений об ошибках. Вы можете узнать больше о обработке исключений .
Вывод
В этом уроке мы узнали о модуле opt и его важной функции, а также о том, как мы можем передавать аргументы командной строки через этот модуль.
Ссылка
Официальные документы