Java执行外部命令行程序,获取命令行输出

一般来说,使用Runtime.getRuntime().exec 来执行一个外部的exe程序,通过proc.getErrorStream()和proc.getInputStream()就可以获得该程序的输出,大多数程序都可以成功获得输出。

但是,这次遇到的例子比较特殊,手动在命令行里执行caption2ass会得到以下内容:
图片描述

我尝试用getErrorStream()或getInputStream()获得caption2ass.exe在命令行中的输出,却无法得到命令行中的内容。

主程序:

Runtime run = Runtime.getRuntime();

Process proc = run.exec("caption2ass.exe");

StreamGobbler errorGobbler = new StreamGobbler(

proc.getErrorStream(), "GBK", "ERR", System.err);

StreamGobbler outputGobbler = new StreamGobbler(

proc.getInputStream(), "GBK", "OUT", System.out);

errorGobbler.start();

outputGobbler.start();

int exitVal = proc.waitFor();

System.out.println("ExitValue: " + exitVal);

StreamGobbler.java :

public class StreamGobbler extends Thread {

InputStream in;

String charsetName;

String type;

PrintStream out;

StreamGobbler(InputStream inputStream, String charsetName, String type, PrintStream out) {

this.in = inputStream;

this.charsetName = charsetName;

this.type = type;

this.out = out;

}

@Override

public void run() {

try {

InputStreamReader isr = new InputStreamReader(in, charsetName);

char[] cbuf = new char[256];

int len = -1;

while ( -1 != (len=isr.read(cbuf))){

out.print(Arrays.copyOf(cbuf, len));

}

} catch (IOException ioe) {

ioe.printStackTrace();

} finally {

IOUtils.closeQuietly(in);

}

}

}
caption2ass下载地址 http://pan.baidu.com/s/1nuCClXR 欢迎测试

回答:

会有这样的程序,这种程序并没有使用标准输出或者错误输出,而是用了更底层的API显示内容。这种程序一般用>符号重定向输出到文件的话得到的是空的内容。这是没有什么好办法的。就像你没法将vim的界面重定向成字符串一样,因为那是在终端控制序列直接绘制的。

回答:

您好,请问这个问题最后解决了吗,我也遇到使用命令行直接输入命令有返回结果,而使用java调用CMD获取不到输出的情况

以上是 Java执行外部命令行程序,获取命令行输出 的全部内容, 来源链接: utcz.com/p/171670.html

回到顶部