Рубрики
Без рубрики

Аргументы командной строки – модуль getopt

Эй, ребята! В этой статье мы рассмотрим модуль getopt, который поддерживает аргументы командной строки. Итак, давайте начнем.

Автор оригинала: 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 и его важной функции, а также о том, как мы можем передавать аргументы командной строки через этот модуль.

Ссылка

Официальные документы