MyTetra Share
Делитесь знаниями!
Время создания: 29.08.2016 14:49
Автор: Andrei Ovsiankin aka EvilBeaver
Текстовые метки: 1c.oscript
Раздел: Программирование - 1с - oscript - libraries - cmdline
Запись: xintrea/mytetra_anatolean/raw/master/base/1472471343r7jbd4vcvf/text.html на bitbucket.org

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

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

В 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"]);

КонецЕсли;

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования