我们的java方法执行如下的批处理脚本:
String command = batchFilePath + File.separator + filename + " " + path;
logger.info("Command to be executed = " + command);
Process process = Runtime.getRuntime().exec(command);
logger.info("Batchfile execution has started");
我们遇到了批处理文件未执行的情况。但是,之前和之后的记录器语句均已正确记录。上面的代码段也在try catch块内,我们看到日志中没有记录任何异常。批处理文件将执行另一个.exe文件,该文件的输出将写入一个单独的文件,并且该文件也未生成。在批处理文件中,如果.exe执行失败但也没有错误,则我们有记录器语句。
有人可以帮助我们确定为什么批处理文件没有执行的原因,因为我们看不到任何错误或异常。
答案 0 :(得分:1)
尝试一下。
This explains how to capture error and output for a started thread
您可以使用process.getErrorStream()
从您的进程中获取错误响应。
您可以创建一个线程来不断读取该错误流,如下所示:
static class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type){
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ((line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
public static void main(String[] args){
String command = batchFilePath + File.separator + filename + " " + path;
logger.info("Command to be executed = " + command);
Process process = Runtime.getRuntime().exec(command);
logger.info("Batchfile execution has started");
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
errorGobbler.start();
}