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

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

Merged
merged 3 commits into from
Mar 1, 2019
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
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
.ВерсияСреды("1.0.17")
.ЗависитОт("logos")
.ЗависитОт("asserts")
.ЗависитОт("semver")
Copy link
Owner

Choose a reason for hiding this comment

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

Зависимость от semver теперь же не нужна!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Убрал зависимость

.ЗависитОт("tempfiles")
.ВключитьФайл("src")
.ВключитьФайл("features")
Expand Down
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 @@

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

// Запуск на выполнение процесса
//
// Возвращаемое значение:
// Процесс - объект класса Процесс
//
Функция ЗапуститьПроцесс() Экспорт
artbear marked this conversation as resolved.
Show resolved Hide resolved

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

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

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

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

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

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

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

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

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

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

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

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


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

Choose a reason for hiding this comment

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

число вместо процесса так и осталось :(

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Поправил

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

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

Попытка

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


Исключение

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

// 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""";
Copy link
Owner

Choose a reason for hiding this comment

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

@khorevaa А вот с удаленной тобой строкой "cmd /c ""%1"""; что-то важное было связано.

сначала вроде бы не было кавычек, а затем они понадобились.

@nixel2007 @EvilBeaver не помните, почему они стояли?

ШаблонЗапуска = "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