Есть ли способ получить stdout и stderr в реальном времени от процесса, порожденного psexec, в тех же потоках (каналах), что и psexec?

903
Tuffwer

Мой вопрос очень близок к этому вопросу здесь с дополнительным ограничением, связанным с тайм-аутами

Я использую Jenkins для запуска некоторого автоматизированного тестирования, а затем для захвата stdout (и stderr) запущенных тестов. Поскольку я ответил там, я определил, как заставить stdout и stderr отображаться после завершения тестов, однако метод, который я описываю, печатает все в терминале, когда процесс завершает свое выполнение, а не так, как он идет.

Моя проблема возникает из-за того, что мои тестовые задания имеют тайм-аут в 15 минут (выполнение сценария тестирования может занять 1,5 или более часов), если Jenkins не видит никаких действий в выходном канале. Я не хочу существенно увеличивать это время ожидания, потому что тесты могут зависать.

Есть ли способ получить потоки stdout и stderr дочернего процесса, созданного psexec, в окне терминала, в котором работает psexec в реальном времени?

psexec запускается пакетным скриптом на тестовых машинах, не используется по сети.

Я рассмотрел запуск psexec с флагом -d и передачу вывода дочернего процесса в файл, а затем просто запустил цикл в пакетном скрипте, который ожидает завершения процесса, кажется, это скорее хак и должно быть вариант последней инстанции.

runas не является хорошей альтернативой, поскольку Дженкинс должен знать, когда завершатся тестовые сценарии. Я мог бы сделать то же самое, что я упомянул выше, с PID и циклом ожидания, но это все еще хак.

Мне также интересно, возможно ли было бы просто передать потоки ввода-вывода psexec дочернему элементу и пропатчить вывод обратно Дженкинсу, но я понятия не имею, как это сделать.

1

0 ответов на вопрос