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

Перехватываем вывод независимо от наличия ошибок #800

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="11c5f751-bfaf-480a-92fe-7f30023f2e9a">
<ExternalDataProcessor uuid="94c6b1e7-9eb4-4925-ae3b-86ddb9b56f0e">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>908d0aaf-e4ec-4668-8d14-3e8075d222fd</xr:ObjectId>
<xr:ObjectId>d5c45041-d9eb-4617-ad45-c5a6420d1f6b</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.УправлениеПриложениями" category="Object">
<xr:TypeId>85629dd2-6be4-49c6-9a69-13411102aa57</xr:TypeId>
<xr:ValueId>3fdd55c8-e92e-4f99-8b28-3ba8957b50ab</xr:ValueId>
<xr:TypeId>27221752-6c79-4c7a-b9f2-2f95bc97f37b</xr:TypeId>
<xr:ValueId>c05f62ba-2037-4948-b0a3-2867a9e7093b</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,15 @@
КодВозврата = 0;

ИмяФайлаВывода = ПолучитьИмяВременногоФайла("txt");
ВремКоманда = ТекстКоманды + " > """ + ИмяФайлаВывода + """";

// `2>&1` редиректит stderr в stdout, чтобы весь вывод собрать в одном файле.
ВремКоманда = ТекстКоманды + "> """ + ИмяФайлаВывода + """ 2>&1";

Попытка

ЗапуститьПриложение(ВремКоманда,, ЖдатьОкончания, КодВозврата);

Если КодВозврата = 0 Тогда
Если ФайлСуществует(ИмяФайлаВывода) Тогда
КонсольныйВывод = ПрочитатьФайлКакТекст(ИмяФайлаВывода, ИспользоватьКодировкуТекстаUTF8);
КонецЕсли;

Expand Down Expand Up @@ -148,7 +150,7 @@
КонецЕсли;

ИмяФайлаВывода = ПолучитьИмяВременногоФайла("txt");
ИмяВременногоФайлаКоманды = "cmd /c """ + ИмяВременногоФайлаКоманды + " > """ + ИмяФайлаВывода + """";
ИмяВременногоФайлаКоманды = "cmd /c """"""" + ИмяВременногоФайлаКоманды + """"" > """"" + ИмяФайлаВывода + """"" 2>&1 "" ";

КонтекстЯдра.Отладка(ТекстКоманды);
//КонтекстЯдра.Отладка(ИмяВременногоФайлаКоманды);
Expand All @@ -159,7 +161,7 @@

Рез = WshShell.Run(ИмяВременногоФайлаКоманды, 0, ?(ЖдатьОкончания, -1, 0));

Если Рез = 0 Тогда
Если ФайлСуществует(ИмяФайлаВывода) Тогда
// команда выполнилась успешно
КонсольныйВывод = ПрочитатьФайлКакТекст(ИмяФайлаВывода, ИспользоватьКодировкуТекстаUTF8);
КонецЕсли;
Expand Down Expand Up @@ -478,4 +480,9 @@

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

Функция ФайлСуществует(Путь)
Файл = Новый Файл(Путь);
Возврат Файл.Существует() И Файл.ЭтоФайл();
КонецФункции

// } Helpers
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,15 @@
КодВозврата = 0;

ИмяФайлаВывода = ПолучитьИмяВременногоФайла("txt");
ВремКоманда = ТекстКоманды + " > """ + ИмяФайлаВывода + """";

// `2>&1` редиректит stderr в stdout, чтобы весь вывод собрать в одном файле.
ВремКоманда = ТекстКоманды + "> """ + ИмяФайлаВывода + """ 2>&1";

Попытка

ЗапуститьПриложение(ВремКоманда,, ЖдатьОкончания, КодВозврата);

Если КодВозврата = 0 Тогда
Если ФайлСуществует(ИмяФайлаВывода) Тогда
КонсольныйВывод = ПрочитатьФайлКакТекст(ИмяФайлаВывода, ИспользоватьКодировкуТекстаUTF8);
КонецЕсли;

Expand Down Expand Up @@ -164,7 +166,7 @@
КонецЕсли;

ИмяФайлаВывода = ПолучитьИмяВременногоФайла("txt");
ИмяВременногоФайлаКоманды = "cmd /c """ + ИмяВременногоФайлаКоманды + " > """ + ИмяФайлаВывода + """";
ИмяВременногоФайлаКоманды = "cmd /c """"""" + ИмяВременногоФайлаКоманды + """"" > """"" + ИмяФайлаВывода + """"" 2>&1 "" ";

КонтекстЯдра.Отладка(ТекстКоманды);
//КонтекстЯдра.Отладка(ИмяВременногоФайлаКоманды);
Expand All @@ -175,7 +177,7 @@

Рез = WshShell.Run(ИмяВременногоФайлаКоманды, 0, ?(ЖдатьОкончания, -1, 0));

Если Рез = 0 Тогда
Если ФайлСуществует(ИмяФайлаВывода) Тогда
// команда выполнилась успешно
КонсольныйВывод = ПрочитатьФайлКакТекст(ИмяФайлаВывода, ИспользоватьКодировкуТекстаUTF8);
КонецЕсли;
Expand Down Expand Up @@ -511,4 +513,9 @@

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

Функция ФайлСуществует(Путь)
Файл = Новый Файл(Путь);
Возврат Файл.Существует() И Файл.ЭтоФайл();
Copy link
Collaborator

Choose a reason for hiding this comment

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

к сожалению, в режиме асинхронности нельзя юзать синхронные методы Файл.Существует и ЭтоФайл (

Поэтому я делал обходной маневр и не проверяю наличие файла, по возможности.

предлагаю и здесь отказаться от этих методов и сразу читать файл

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

// } Helpers