-
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 1 commit
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 |
---|---|---|
|
@@ -3,6 +3,7 @@ | |
|
||
#Использовать logos | ||
#Использовать asserts | ||
#Использовать semver | ||
|
||
Перем Приложение; | ||
Перем ИспользуетсяЕдинаяСтрокаЗапуска; | ||
|
@@ -19,6 +20,7 @@ | |
Перем НемедленнныйВывод; | ||
Перем ПодключенныеЛоги; | ||
|
||
Перем ВерсияБольшеИлиРавна21; | ||
Перем ЭтоWindows; | ||
Перем Лог; | ||
|
||
|
@@ -38,6 +40,23 @@ | |
|
||
КонецФункции | ||
|
||
// Выполнение произвольной команды | ||
// | ||
// Возвращаемое значение: | ||
// Число - код возврата команды | ||
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. Косяк! ))) Поправлю |
||
// | ||
Функция ЗапуститьПроцесс() Экспорт | ||
artbear marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
ПроверитьВозможностьВыполненияКоманды(); | ||
|
||
Процесс = ЗапуститьПроцессКоманды(); | ||
|
||
Лог.Отладка("Запущен процесс с идентификатором <%1>", Процесс.Идентификатор); | ||
|
||
Возврат Процесс; | ||
|
||
КонецФункции | ||
|
||
// Получить имя лога продукта | ||
// | ||
// Возвращаемое значение: | ||
|
@@ -304,48 +323,63 @@ | |
|
||
ПерехватыватьПотоки = Истина; | ||
|
||
Попытка | ||
|
||
Если КодировкаВывода = Неопределено Тогда | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); | ||
Иначе | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); | ||
КонецЕсли; | ||
Процесс = ЗапуститьПроцессКоманды(ПерехватыватьПотоки); | ||
|
||
ПолучитьВыводПокаПроцессИсполняется(Процесс); | ||
|
||
Исключение | ||
Инфо = ИнформацияОбОшибке(); | ||
КодВозврата = Процесс.КодВозврата; | ||
ПроверитьКодВозврата(КодВозврата); | ||
|
||
// TODO код проверки на регулярку (ниже) убрать после выпуска релиза OneScript 1.0.21 | ||
РегуляркаОшибкиПеременныхСреды = Новый РегулярноеВыражение("\(System\.ArgumentException\):[^:]+:.*HOME[^:]+:.*home"); | ||
Если РегуляркаОшибкиПеременныхСреды.Совпадает(Инфо.Описание) Тогда | ||
Лог.Предупреждение("Возникла ошибка, связанная с переменными среды при старте нового процесса | ||
|В связи с багом в движке OneScript до версии 1.0.21 | ||
|%1 | ||
| | ||
|Выполняю старт процесса без указания переменных среды.", Инфо.Описание); | ||
Возврат КодВозврата; | ||
|
||
КонецФункции | ||
|
||
Лог.Отладка("Полное описание ошибки: | ||
|%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. число вместо процесса так и осталось :( 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. Поправил |
||
// | ||
Функция ЗапуститьПроцессКоманды(ПерехватыватьПотоки = Ложь) | ||
|
||
СтрокаЗапуска = СформироватьСтрокуЗапускаПроцесса(); | ||
|
||
Попытка | ||
|
||
Если ВерсияБольшеИлиРавна21 Тогда | ||
|
||
Если КодировкаВывода = Неопределено Тогда | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); | ||
Иначе | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); | ||
КонецЕсли; | ||
|
||
|
||
Иначе | ||
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); | ||
|
||
Если КодировкаВывода = Неопределено Тогда | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); | ||
Иначе | ||
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); | ||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
|
||
Исключение | ||
|
||
Инфо = ИнформацияОбОшибке(); | ||
|
||
ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); | ||
|
||
КонецПопытки; | ||
|
||
Процесс.Запустить(); | ||
Процесс.Запустить(); | ||
|
||
ПолучитьВыводПокаПроцессИсполняется(Процесс); | ||
|
||
КодВозврата = Процесс.КодВозврата; | ||
ПроверитьКодВозврата(КодВозврата); | ||
|
||
Возврат КодВозврата; | ||
Возврат Процесс; | ||
|
||
КонецФункции | ||
|
||
|
@@ -375,14 +409,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 +516,7 @@ | |
|
||
РабочийКаталог = "."; | ||
ВыводКоманды = ""; | ||
КодировкаВывода = Неопределено; //КодировкаТекста.UTF8; | ||
КодировкаВывода = Неопределено;//КодировкаТекста.UTF8; | ||
Параметры = Новый Массив; | ||
|
||
ИспользуетсяЕдинаяСтрокаЗапуска = Ложь; | ||
|
@@ -495,7 +529,11 @@ | |
НемедленнныйВывод = Ложь; | ||
|
||
ПодключенныеЛоги = Новый Массив; | ||
|
||
|
||
СИ = Новый СистемнаяИнформация; | ||
ТекущаяВерсия = Новый Версия(СИ.Версия); | ||
ВерсияБольшеИлиРавна21 = ТекущаяВерсия.БольшеИлиРавны(Новый Версия("1.0.21")); | ||
artbear marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
КонецПроцедуры | ||
|
||
Инициализация(); | ||
|
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.
Убрал зависимость