您的位置:首页 > 其它

在程序中调用外部程序,用process返回命令执行结果以及抓取错误信息的方法

2011-04-26 17:34 1201 查看
在Java代码里调用外部程序时,比如一个ksh等,可以用如下方法:
The
ProcessBuilder.start()
and
Runtime.exec
methods create a native process and return an instance of a subclass of
Process
that can be used to control the process and obtain information about it.
所以在调用外部程序时,使用process将启动一个新进程,用于执行外部程序。使用waitfor()等待外部程序执行完毕并返回值。

String command = String.format(CHECK_GRAPH_IS_RUNNING_FORMAT, recoveryFile.getAbsolutePath());
Process process = execCommand(command);
int isRunningExitCode = process.waitFor();
return (SUCCESS_EXIT_VALUE == isRunningExitCode);

protected Process execCommand(final String command) throws IOException {
return Runtime.getRuntime().exec(command, getEnvp(), getWorkingFolder());
}
process.waitFor(); causes the current thread to wait, if necessary, until the process represented by this
Process
object has terminated. This method returns immediately if the subprocess has already terminated. If the subprocess has not yet terminated, the calling thread will be blocked until the subprocess exits.
the exit value of the process. By convention,
0
indicates normal termination.
返回的这个参数isRunningExitCode 就是command运行的返回值。

此外,当运行外部程序出现错误时,可以很方便的抓取返回信息并进一步加以分析。
private Process process;
process = launchTaskProcess();
processOutStreamLog = process == null ? EMPTY : NEW_LINE + "Task process out stream >>>> " + NEW_LINE
+ readInputStream(process.getInputStream());
processErrorStreamLog = process == null ? EMPTY : NEW_LINE + "Task process error stream >>>> "
+ NEW_LINE + readInputStream(process.getErrorStream());
这里的process.getInputStream() 和 process.getErrorStream() 就可以取得执行的process的outputmessage.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: