|
1 | 1 | #Использовать collectionos |
2 | 2 |
|
| 3 | +Перем СтекПерехватаВывода; // СписокМассив - стек потоков перехвата консольного вывода |
| 4 | +Перем _СтандартныйПотокВывода; // Поток - системный stdout, открывается лениво |
| 5 | +Перем _СтандартныйПотокОшибок; // Поток - системный stderr, открывается лениво |
| 6 | + |
| 7 | +// Перенаправляет консольный вывод и вывод ошибок в переданный поток. |
| 8 | +// Перехваты могут быть вложенными: модуль ведёт единый на процесс стек потоков, |
| 9 | +// поэтому вложенный перехват по завершении вернёт вывод в объемлющий поток, |
| 10 | +// а не в системную консоль. |
| 11 | +// |
| 12 | +// Параметры: |
| 13 | +// Поток - Поток, ПотокВПамяти - Поток, в который перенаправляется вывод |
| 14 | +// |
| 15 | +Процедура НачатьПерехватВывода(Поток) Экспорт |
| 16 | + |
| 17 | + СтекПерехватаВывода.Добавить(Поток); |
| 18 | + |
| 19 | + Консоль.УстановитьПотокВывода(Поток); |
| 20 | + Консоль.УстановитьПотокОшибок(Поток); |
| 21 | + |
| 22 | +КонецПроцедуры |
| 23 | + |
| 24 | +// Завершает последний начатый перехват вывода и восстанавливает |
| 25 | +// объемлющий поток перехвата, либо системную консоль, если перехватов не осталось |
| 26 | +// |
| 27 | +Процедура ЗавершитьПерехватВывода() Экспорт |
| 28 | + |
| 29 | + Если Не СтекПерехватаВывода.Пусто() Тогда |
| 30 | + СтекПерехватаВывода.УдалитьПоИндексу(СтекПерехватаВывода.ВГраница()); |
| 31 | + КонецЕсли; |
| 32 | + |
| 33 | + Если СтекПерехватаВывода.Пусто() Тогда |
| 34 | + Консоль.УстановитьПотокВывода(СтандартныйПотокВывода()); |
| 35 | + Консоль.УстановитьПотокОшибок(СтандартныйПотокОшибок()); |
| 36 | + Иначе |
| 37 | + ОбъемлющийПоток = СтекПерехватаВывода.Получить(СтекПерехватаВывода.ВГраница()); |
| 38 | + Консоль.УстановитьПотокВывода(ОбъемлющийПоток); |
| 39 | + Консоль.УстановитьПотокОшибок(ОбъемлющийПоток); |
| 40 | + КонецЕсли; |
| 41 | + |
| 42 | +КонецПроцедуры |
| 43 | + |
3 | 44 | Функция РазвернутьСписокТестовыхНаборов(Знач КаталогиТестов, Знач ФайлыТестов, Знач ИскатьВПодкаталогах) Экспорт |
4 | 45 |
|
5 | 46 | Результат = Новый СписокМассив; |
|
68 | 109 |
|
69 | 110 | КонецФункции |
70 | 111 |
|
| 112 | +Функция СтандартныйПотокВывода() |
| 113 | + |
| 114 | + Если _СтандартныйПотокВывода = Неопределено Тогда |
| 115 | + _СтандартныйПотокВывода = Консоль.ОткрытьСтандартныйПотокВывода(); |
| 116 | + КонецЕсли; |
| 117 | + |
| 118 | + Возврат _СтандартныйПотокВывода; |
| 119 | + |
| 120 | +КонецФункции |
| 121 | + |
| 122 | +Функция СтандартныйПотокОшибок() |
| 123 | + |
| 124 | + Если _СтандартныйПотокОшибок = Неопределено Тогда |
| 125 | + _СтандартныйПотокОшибок = Консоль.ОткрытьСтандартныйПотокОшибок(); |
| 126 | + КонецЕсли; |
| 127 | + |
| 128 | + Возврат _СтандартныйПотокОшибок; |
| 129 | + |
| 130 | +КонецФункции |
| 131 | + |
71 | 132 | Функция СтекВызовов(ИнформацияОбОшибке) |
72 | 133 |
|
73 | 134 | Стек = ИнформацияОбОшибке.ПолучитьСтекВызовов(); |
|
83 | 144 | .ВСтроку(Символы.ПС); |
84 | 145 |
|
85 | 146 | КонецФункции |
| 147 | + |
| 148 | +СтекПерехватаВывода = Новый СписокМассив; |
0 commit comments