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

在Java中,通过`Runtime.getRuntime().exec()`方法可以创建一个子进程来执行外部程序,如ksh。使用`Process`对象的`waitFor()`方法等待外部程序完成并获取其退出状态码,这通常用于判断程序是否正常结束。当需要捕获外部程序的输出或错误信息时,可以分别读取`getInputStream()`和`getErrorStream()`,以便分析和处理可能出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值