Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Управление выводом команды #23

Merged
merged 3 commits into from
Feb 11, 2017
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
ВсеШаги.Добавить("ЯПолучаюИсключениеПриВыполненииКоманды");
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды");
ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду");
ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -80,6 +81,14 @@
Команда.УстановитьПериодОпросаЗавершения(ТаймаутВМиллисекундах);
КонецПроцедуры

//Я снимаю флаг показа немедленного вывода команды "oscript"
Процедура ЯСнимаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);

Команда.ПоказыватьВыводНемедленно(Ложь);
КонецПроцедуры


// { Служебные функции

Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина)
Expand Down
17 changes: 11 additions & 6 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,19 @@
Когда Я выполняю команду "oscript"
Тогда Код возврата команды "oscript" равен 0

Сценарий: Проверка неправильного диапазона кодов возврата команды
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
Тогда Я получаю исключение при выполнении команды "oscript"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды c установленным периодом опроса завершения команды
Когда Я устанавливаю период опроса завершения команды "oscript" в 1 миллисекунду
# И Я включаю отладку лога с именем "oscript.lib.commands"
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды c запретом немедленного вывода команды команды
Когда Я снимаю флаг показа немедленного вывода команды "oscript"
И Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
И Код возврата команды "oscript" равен 0

Сценарий: Проверка неправильного диапазона кодов возврата команды
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
Тогда Я получаю исключение при выполнении команды "oscript"
И Код возврата команды "oscript" равен 0
49 changes: 37 additions & 12 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
Перем МинимальныйОжидаемыйКодВозврата;
Перем МаксимальныйОжидаемыйКодВозврата;
Перем ПериодОпросаВМиллисекундах;
Перем НемедленнныйВывод;

Перем ЭтоWindows;
Перем Лог;
Expand Down Expand Up @@ -117,6 +118,17 @@
Возврат КодВозврата;
КонецФункции

// Управляет мгновенным выводом лога команды
//
// Параметры:
// НемедленныйПоказ - Булевое
// Ложь: показывает вывод только после завершения выполнения команды
// Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды
//
Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт
НемедленнныйВывод = НемедленныйПоказ;
КонецПроцедуры

// Установить ожидаемый код возврата
// После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым
//
Expand Down Expand Up @@ -292,21 +304,33 @@
КонецЕсли;
Процесс.Запустить();

Приостановить(ПериодОпросаВМиллисекундах);
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;
Если НемедленнныйВывод Тогда
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Разве не на оборот? Немедленный вывод не ждёт ожидания завершения процесса, а сразу плюет в консоль

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, опечатался, при проверке тестов увидел и уже исправил.

Процесс.ОжидатьЗавершения();
ЗаписьXML.ЗаписатьБезОбработки(Процесс.ПотокВывода.Прочитать());
Иначе
Приостановить(ПериодОпросаВМиллисекундах);
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;

ОчереднаяСтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
Лог.Отладка(" %1", ОчереднаяСтрокаВывода);
ОчереднаяСтрокаВывода = Процесс.ПотокВывода.Прочитать();
ОчереднаяСтрокаВывода = СтрЗаменить(ОчереднаяСтрокаВывода, Символы.ВК, "");
Лог.Отладка("%2%1", ОчереднаяСтрокаВывода, Символы.ПС);

СтрокаВывода = "" + ОчереднаяСтрокаВывода + Символы.ПС;
ЗаписьXML.ЗаписатьБезОбработки(СтрокаВывода);
КонецЦикла;
ЗаписьXML.ЗаписатьБезОбработки(ОчереднаяСтрокаВывода);
КонецЦикла;

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
УстановитьВывод(РезультатРаботыПроцесса);
КонецЕсли;

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
Если НемедленнныйВывод Тогда
Лог.Отладка("%2%1", РезультатРаботыПроцесса, Символы.ПС);
КонецЕсли;
// Если Лог.Уровень() = УровниЛога.Отладка Тогда
Лог.Отладка("Длина вывода %1, количество строк %2", СтрДлина(РезультатРаботыПроцесса), СтрЧислоСтрок(РезультатРаботыПроцесса));
// КонецЕсли;
УстановитьВывод(РезультатРаботыПроцесса);

КодВозврата = Процесс.КодВозврата;
Если ПроверяемКодВозврата Тогда
Expand Down Expand Up @@ -350,6 +374,7 @@
ОжидаемыйКодВозврата = 0;

ПериодОпросаВМиллисекундах = 100;
НемедленнныйВывод = Истина;

КонецПроцедуры

Expand Down
File renamed without changes.