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

analiz argumentov komandnoj stroki Контекст выполнения сценариев

Однако при регулярном использовании аргументов командной строки вы можете обнаружить, что писать код, который вылавливает в списке слова, неудобно. Обычно при запуске программы преобразуют список аргументов в структуры, более удобные для обработки. Ниже приводится один из способов реализации такого преобразования: сценарий в примере 3.2 просматривает список argv в поисках пар optionname optionvalue и помещает их в словарь, используя в качестве ключей имена параметров, чтобы потом их было легче извлекать.

Пример 3.2. PP4E\System\testargv2.py

“собирает параметры командной строки в словаре”

def getopts(argv): opts = {} while argv: if argv[0][0] == ‘-’: # поиск пар “-name value”

opts[argv[0]] = argv[1] # ключами словарей будут имена параметров argv = argv[2:]

else:

argv = argv[1:] return opts

if __name__ == ‘__main__’: from sys import argv # пример клиентского программного кода

myargs = getopts(argv)

if ‘-i’ in myargs:

print(myargs[‘-i’])

print(myargs)

Такую функцию можно импортировать и использовать во всех инструментах командной строки. Если запустить этот пример как самостоятельный сценарий, он просто выведет отформатированный словарь аргументов:

C:\\PP4E\System> python testargv2.py

{}

C:\\PP4E\System> python testargv2.py -i data.txt -o results.txt data.txt {‘-o’: ‘results.txt’, ‘-i’: ‘data.txt’}

Естественно, мы могли бы предусмотреть еще более сложную реализацию механизма работы с аргументами, добавить проверку ошибок и тому подобное. Для обработки более сложных командных строк мы могли бы использовать более развитые инструменты обработки командной строки из стандартной библиотеки Python:

     Модуль getopt моделирует поведение одноименной утилиты Unix/C

     Модуль optparse является более современной альтернативой и по общему признанию — более мощной

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

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий