2016-09-20 1 views
1

У меня есть следующий код для вызова приложения с входным и выходным перенаправлениемКак перенаправить ввод в программу и убить приложение, если оно занимает слишком много времени

%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! 

Проблема возникает, когда целевое приложение по какой-то причине не заканчивается, и пакетный скрипт ждет навсегда. Мне нужно перенаправить ввод и вывод, а также добавить тайм-аут для приложения. Я пробовал:

start %prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! 
timeout /t 2 
taskkill /im %prgm1% /f 

, но в конечном итоге открытие большого количества вкладок на моей консоли, а не перенаправлять ввод и вывод.

Как я могу реализовать убийство приложения, если он занимает больше времени, чем позволяет сказать 2 секунды, если он не заканчивается сам, а также перенаправляет ввод и вывод без открытия дополнительных вкладок консолей?

ответ

0

Ваша проблема заключается в перенаправлении команд stdin и stdout команды start вместо перенаправления потоков вашей программы.

Не зная точное содержание переменных делает невозможным определить, где правильно цитировать команды, но вы можете попробовать что-то вроде

start /b "" cmd /c "%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! " 
timeout /t 2 
taskkill /im %prgm1% /f 

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

Другой вариант сделать только на противоположном: выполнить в отдельном случае процесс код убийства и оставить на текущий cmd хэндл перенаправлению

start /b "" cmd /c ">nul timeout /t 2 & taskkill /im %prgm1% /f" 
%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! 
Смежные вопросы