Урок 4.2. Python — Аргументы командной строки

Python предоставляет модуль getopt, который помогает анализировать параметры и аргументы командной строки.

$ python test.py arg1 arg2 arg3

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

  • argv - список аргументов командной строки.
  • len(sys.argv) - количество аргументов командной строки питон.

Здесь sys.argv [0] - это программа, т.е. имя сценария.

Пример

Рассмотрим следующий сценарий test.py:

#!/usr/bin/python

import sys

print 'Количество аргументов:', len(sys.argv), 'аргументы.'
print 'Список аргументов:', str(sys.argv)

Теперь запустим вышеуказанный скрипт следующим образом:

$ python test.py arg1 arg2 arg3

Это дает следующий результат:

Количество аргументов: 4 аргумента.
Список аргументов: ['test.py', 'arg1', 'arg2', 'arg3']

Примечание: как упоминалось выше, первым аргументом всегда является название сценария, и оно также учитывается в количестве аргументов.

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

Python предоставил модуль getopt, который помогает анализировать опции и аргументы командной строки. Этот модуль предоставляет две функции и исключение для включения синтаксического анализа аргументов командной строки.

Метод getopt.getopt

Этот метод анализирует параметры командной строки и список параметров. Ниже приведен простой синтаксис этого метода:

getopt.getopt(args, options, [long_options])

Подробности параметров:

  • args− Список аргументов для анализа.
  • options − Строка букв для опций, которую сценарий хочет распознать, при этом опции, требующие аргумента, должны сопровождаться двоеточием (:).
  • long_options − необязательный параметр, он должен указываться списком строк с именами длинных опций, которые должны поддерживаться. Длинные опции, требующие аргумента, должны сопровождаться знаком равенства ('='). Для принятия только длинных опций, опции должны быть пустой строкой.
  • Этот метод возвращает значение, состоящее из двух элементов: первый — это список пар (опция, значение). Второй — это список аргументов программы, оставшихся после удаления списка опций.
  • Каждая возвращенная пара опция-значение имеет опцию в качестве первого элемента с префиксом дефиса для коротких опций (например, '-x') или двумя дефисами для длинных опций (например, '--long-option’).

Исключение getopt.GetoptError

Исключение возникает, когда в списке аргументов обнаруживается нераспознанная опция или когда опция, требующая аргумента, не имеет его.

Аргументом исключения является строка, указывающая причину ошибки. Атрибуты msg и opt содержат сообщение об ошибке и соответствующую опцию.

Пример передачи аргументов командной строке Python

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

usage: test.py -i  -o 

Вот следующий скрипт для test.py:

#!/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 'Входной файл "', inputfile
   print 'Выходной файл "', outputfile

if __name__ == "__main__":
   main(sys.argv[1:])

Теперь запустите приведенный выше сценарий следующим образом:

$ 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
Выходной файл "
Поделитесь:

О сайте

Все материалы сайта proglang.su являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт proglang.su запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону. Мы это делаем, чтобы защитить плоды своих трудов от воровства. © 2014-2019

Присоединяйтесь


Обратная связь