An open API service indexing awesome lists of open source software.

https://github.com/oscript-library/cmdline

Парсер аргументов командной строки
https://github.com/oscript-library/cmdline

Last synced: 7 months ago
JSON representation

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

Awesome Lists containing this project

README

          

# Парсер командной строки

Одним из способов параметризации скрипта является передача аргументов в командной строке. Традиционно, операционная система передает аргументы командной строки в виде массива строк.

В 1Script доступна глобальная коллекция `АргументыКоманднойСтроки`, в которой можно получить значения, переданные в скрипт извне.

Понятно, что прямая обработка таких аргументов не всегда удобна, поэтому применяют библиотеки-парсеры. Библиотека **cmdline** является таким парсером для 1Script.

#Использовать cmdline

Парсер = Новый ПарсерАргументовКоманднойСтроки();

## Концепция

В парсер мы передаем наши ожидания - какие именно параметры мы ждем на входе. Парсер разбирает массив аргументов и возвращает нам значения в виде объекта. Если пользователь неправильно передал параметры, то парсер вернет `Неопределено`.

Параметры бывают двух видов:

* Позиционные - сам параметр является значением. В командной строке указано непосредственное значение
* Именованные - сначала в командной строке указано имя, затем значение

myprogram c:\file.txt -action delete

В приведенном примере в скрипт myprogram передано 3 аргумента с точки зрения ОС. При этом, первый аргумент - позиционный, у него нет предварительной части, он сам по себе и его значение `c:\file.txt`.

Далее идет *именованный* параметр `-action` и его значение - `delete`.

Чтобы задать данный синтаксис, мы должны настроить парсер:

Парсер.ДобавитьПараметр("ПутьКФайлу");
Парсер.ДобавитьИменованныйПараметр("-action");

Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Сообщить(Параметры["ПутьКФайлу"]);
Сообщить(Параметры["-action"]);

## Команды
В более сложных случаях скрипт может принимать на вход некие "Команды", задающие режим работы. И каждая команда может иметь свой состав аргументов. Яркий пример - git. При запуске мы передаем команду и ее параметры, например:

git clone http://github.com/repo
git commit somefile.txt -m "сообщение коммита"

Сначала идет команда, а то, что идет за ней - зависит от самой команды.

Команда = Парсер.ОписаниеКоманды("init");

Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ПутьКХранилищу");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ЛокальныйКаталогГит");

Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-email");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-debug");
Парсер.ДобавитьКоманду(Команда);

Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
Если Результат.Команда = "init" Тогда
Параметры = Результат.ЗначенияПараметров;
Сообщить(Параметры["ПутьКХранилищу"]);
Сообщить(Параметры["-debug"]);
КонецЕсли;