Skip to content

Commit

Permalink
fix artbear#38 Запуска команды и получения процесса выполнения (artbe…
Browse files Browse the repository at this point in the history
…ar#39)

* fix artbear#38 Запуска команды и получения процесса выполнения

* Устранены замечания

* Исправления по замечаниям
  • Loading branch information
khorevaa authored and artbear committed Mar 1, 2019
1 parent 649427d commit 9c8c523
Showing 1 changed file with 55 additions and 33 deletions.
88 changes: 55 additions & 33 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#Использовать logos
#Использовать asserts


Перем Приложение;
Перем ИспользуетсяЕдинаяСтрокаЗапуска;
Перем Параметры;
Expand All @@ -19,6 +20,7 @@
Перем НемедленнныйВывод;
Перем ПодключенныеЛоги;

Перем ВерсияБольшеИлиРавна21;
Перем ЭтоWindows;
Перем Лог;

Expand All @@ -38,6 +40,23 @@

КонецФункции

// Запуск на выполнение процесса
//
// Возвращаемое значение:
// Процесс - объект класса Процесс
//
Функция ЗапуститьПроцесс() Экспорт

ПроверитьВозможностьВыполненияКоманды();

Процесс = ЗапуститьПроцессКоманды();

Лог.Отладка("Запущен процесс с идентификатором <%1>", Процесс.Идентификатор);

Возврат Процесс;

КонецФункции

// Получить имя лога продукта
//
// Возвращаемое значение:
Expand Down Expand Up @@ -304,48 +323,51 @@

ПерехватыватьПотоки = Истина;

Процесс = ЗапуститьПроцессКоманды(ПерехватыватьПотоки);

ПолучитьВыводПокаПроцессИсполняется(Процесс);

КодВозврата = Процесс.КодВозврата;
ПроверитьКодВозврата(КодВозврата);

Возврат КодВозврата;

КонецФункции


// Запустить команду в операционной системе с ожиданием ее выполнения
//
// Параметры:
// Параметры - Массив - Массив строковых аргументов, передаваемых в командную
// строку. Добавляются после исполняемого файла.
//
// Возвращаемое значение:
// Процесс - запущенный процесс
//
Функция ЗапуститьПроцессКоманды(ПерехватыватьПотоки = Ложь)

СтрокаЗапуска = СформироватьСтрокуЗапускаПроцесса();

Попытка

Если КодировкаВывода = Неопределено Тогда
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды());
Иначе
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());
КонецЕсли;


Исключение

Инфо = ИнформацияОбОшибке();

// TODO код проверки на регулярку (ниже) убрать после выпуска релиза OneScript 1.0.21
РегуляркаОшибкиПеременныхСреды = Новый РегулярноеВыражение("\(System\.ArgumentException\):[^:]+:.*HOME[^:]+:.*home");
Если РегуляркаОшибкиПеременныхСреды.Совпадает(Инфо.Описание) Тогда
Лог.Предупреждение("Возникла ошибка, связанная с переменными среды при старте нового процесса
|В связи с багом в движке OneScript до версии 1.0.21
|%1
|
|Выполняю старт процесса без указания переменных среды.", Инфо.Описание);

Лог.Отладка("Полное описание ошибки:
|%1", Инфо.ПодробноеОписаниеОшибки());

Если КодировкаВывода = Неопределено Тогда
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки);
Иначе
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода);
КонецЕсли;
Иначе
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки();
КонецЕсли;
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки();

КонецПопытки;

Процесс.Запустить();
Процесс.Запустить();

ПолучитьВыводПокаПроцессИсполняется(Процесс);

КодВозврата = Процесс.КодВозврата;
ПроверитьКодВозврата(КодВозврата);

Возврат КодВозврата;
Возврат Процесс;

КонецФункции

Expand Down Expand Up @@ -375,14 +397,14 @@

Если ИспользуемКомандныйПроцессор Тогда
Если ЭтоWindows Тогда
ШаблонЗапуска = "cmd /c ""%1""";
ШаблонЗапуска = "cmd /c %1";
Иначе
ШаблонЗапуска = "sh -c '%1'";
КонецЕсли;

СтрокаЗапуска = СтрШаблон(ШаблонЗапуска, СтрокаЗапуска);
КонецЕсли;
Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска);
Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска);

Возврат СтрокаЗапуска;
КонецФункции // СформироватьСтрокуЗапускаПроцесса()
Expand Down Expand Up @@ -482,7 +504,7 @@

РабочийКаталог = ".";
ВыводКоманды = "";
КодировкаВывода = Неопределено; //КодировкаТекста.UTF8;
КодировкаВывода = Неопределено;//КодировкаТекста.UTF8;
Параметры = Новый Массив;

ИспользуетсяЕдинаяСтрокаЗапуска = Ложь;
Expand All @@ -495,7 +517,7 @@
НемедленнныйВывод = Ложь;

ПодключенныеЛоги = Новый Массив;
КонецПроцедуры

Инициализация();
Expand Down

0 comments on commit 9c8c523

Please sign in to comment.