-
Notifications
You must be signed in to change notification settings - Fork 13
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
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ | |
#Использовать logos | ||
#Использовать asserts | ||
|
||
|
||
Перем Приложение; | ||
Перем ИспользуетсяЕдинаяСтрокаЗапуска; | ||
Перем Параметры; | ||
|
@@ -19,6 +20,7 @@ | |
Перем НемедленнныйВывод; | ||
Перем ПодключенныеЛоги; | ||
|
||
Перем ВерсияБольшеИлиРавна21; | ||
Перем ЭтоWindows; | ||
Перем Лог; | ||
|
||
|
@@ -38,6 +40,23 @@ | |
|
||
КонецФункции | ||
|
||
// Запуск на выполнение процесса | ||
// | ||
// Возвращаемое значение: | ||
// Процесс - объект класса Процесс | ||
// | ||
Функция ЗапуститьПроцесс() Экспорт | ||
artbear marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
ПроверитьВозможностьВыполненияКоманды(); | ||
|
||
Процесс = ЗапуститьПроцессКоманды(); | ||
|
||
Лог.Отладка("Запущен процесс с идентификатором <%1>", Процесс.Идентификатор); | ||
|
||
Возврат Процесс; | ||
|
||
КонецФункции | ||
|
||
// Получить имя лога продукта | ||
// | ||
// Возвращаемое значение: | ||
|
@@ -304,48 +323,51 @@ | |
|
||
ПерехватыватьПотоки = Истина; | ||
|
||
Процесс = ЗапуститьПроцессКоманды(ПерехватыватьПотоки); | ||
|
||
ПолучитьВыводПокаПроцессИсполняется(Процесс); | ||
|
||
КодВозврата = Процесс.КодВозврата; | ||
ПроверитьКодВозврата(КодВозврата); | ||
|
||
Возврат КодВозврата; | ||
|
||
КонецФункции | ||
|
||
|
||
// Запустить команду в операционной системе с ожиданием ее выполнения | ||
// | ||
// Параметры: | ||
// Параметры - Массив - Массив строковых аргументов, передаваемых в командную | ||
// строку. Добавляются после исполняемого файла. | ||
// | ||
// Возвращаемое значение: | ||
// Число - Код возврата приложения | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. число вместо процесса так и осталось :( There was a problem hiding this comment. Choose a reason for hiding this commentThe 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", Инфо.ПодробноеОписаниеОшибки()); | ||
|
||
Если КодировкаВывода = Неопределено Тогда | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); | ||
Иначе | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); | ||
КонецЕсли; | ||
Иначе | ||
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); | ||
КонецЕсли; | ||
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); | ||
|
||
КонецПопытки; | ||
|
||
Процесс.Запустить(); | ||
Процесс.Запустить(); | ||
|
||
ПолучитьВыводПокаПроцессИсполняется(Процесс); | ||
|
||
КодВозврата = Процесс.КодВозврата; | ||
ПроверитьКодВозврата(КодВозврата); | ||
|
||
Возврат КодВозврата; | ||
Возврат Процесс; | ||
|
||
КонецФункции | ||
|
||
|
@@ -375,14 +397,14 @@ | |
|
||
Если ИспользуемКомандныйПроцессор Тогда | ||
Если ЭтоWindows Тогда | ||
ШаблонЗапуска = "cmd /c ""%1"""; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @khorevaa А вот с удаленной тобой строкой сначала вроде бы не было кавычек, а затем они понадобились. @nixel2007 @EvilBeaver не помните, почему они стояли? |
||
ШаблонЗапуска = "cmd /c %1"; | ||
Иначе | ||
ШаблонЗапуска = "sh -c '%1'"; | ||
КонецЕсли; | ||
|
||
СтрокаЗапуска = СтрШаблон(ШаблонЗапуска, СтрокаЗапуска); | ||
КонецЕсли; | ||
Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска); | ||
Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска); | ||
|
||
Возврат СтрокаЗапуска; | ||
КонецФункции // СформироватьСтрокуЗапускаПроцесса() | ||
|
@@ -482,7 +504,7 @@ | |
|
||
РабочийКаталог = "."; | ||
ВыводКоманды = ""; | ||
КодировкаВывода = Неопределено; //КодировкаТекста.UTF8; | ||
КодировкаВывода = Неопределено;//КодировкаТекста.UTF8; | ||
Параметры = Новый Массив; | ||
|
||
ИспользуетсяЕдинаяСтрокаЗапуска = Ложь; | ||
|
@@ -495,7 +517,7 @@ | |
НемедленнныйВывод = Ложь; | ||
|
||
ПодключенныеЛоги = Новый Массив; | ||
КонецПроцедуры | ||
|
||
Инициализация(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Зависимость от semver теперь же не нужна!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Убрал зависимость