Запустите bat-файл из java-кода, чтобы получить желаемый результат в txt-файле - не могу :(

У меня следующая проблема. У меня есть bat-файл, который запускает тест testcomplete. После завершения теста в testcomplete приложение закрывается, и код выхода передается обратно в летучую мышь. Еще в bat-файле я создаю txt-файл с именем result, а затем, в зависимости от кода выхода, я записываю в него успехи, неудачи и т. д. Когда я запускаю этот bat-файл в Windows 7, я вижу, что тест выполняется, и после его завершения результат.txt появляется файл с необходимой мне информацией. Но когда я просто запускаю этот же bat-файл из java-кода:

Process p1 = Runtime.getRuntime().exec(batch);

после завершения теста файл не появляется. Есть ли способ заставить это работать нормально? Что я должен изменить?

Код скрипта более менее похож на этот:

@ECHO OFF
"...\Bin\TestComplete.exe" "sometext.pjs" /r 
/p:sometext PathToApp="sometext.jnlp" Login=ads Password=ass  /t:"sometext|sometext" /exit 
IF ERRORLEVEL 3 GOTO CannotRun
IF ERRORLEVEL 2 GOTO Errors
IF ERRORLEVEL 1 GOTO Warnings
IF ERRORLEVEL 0 GOTO Success

:CannotRun
ECHO The script cannot be run >> "result.txt"
GOTO End

:Errors
ECHO There are errors >> "result.txt"
GOTO End

:Warnings
ECHO There are warnings >> "result.txt"
GOTO End

:Success
ECHO No errors >> "result.txt"
GOTO End

:End

person Arek    schedule 28.07.2011    source источник


Ответы (2)


Я предполагаю, что вам нужно указать свой рабочий каталог, используя перегруженную версию exec:

exec(String command, String[] envp, File dir)

person Peter Lang    schedule 28.07.2011
comment
Спасибо за ответы. Но сейчас есть другая проблема. Я сделал это, чтобы получить текстовый файл с результатом тестового прогона. Теперь из моего кода я хотел бы дождаться завершения но прогона. Я делаю это в цикле, пока не появится файл с именем result.txt. Думаю, не самое приятное решение, но я подумал, что оно может сработать. Что происходит, так это то, что он будет нормально зацикливаться и ждать, пока файл не будет создан, но параметры, которые я отправляю в testcomplete, туда не попадают. Кажется, что они просто приходят в приложение, потому что мои входные данные в тестируемом приложении не заполняются. Когда я запускаю его без какого-либо ожидания в коде, все в порядке. - person Arek; 28.07.2011
comment
@Arek: Я не уверен, понимаю ли я, что вы имеете в виду, но если ваша первоначальная проблема решена, попробуйте задать другой вопрос, описав новую проблему. - person Peter Lang; 28.07.2011

Другое дело, что вы всегда должны читать InputStream процесса. Если вы этого не сделаете, процесс может зависнуть.

person DoubleMalt    schedule 28.07.2011