您的位置:首页 > 产品设计 > UI/UE

使用ProcessBuilder创建process时,BufferedReader.readLine()超时

2016-08-05 18:13 274 查看
在Java中,用ProcessBuilder创建一个Process,向cmd输入命令,拿到正常输出和error,方法如下:
String cmds = ...;

ProcessBuilder builder = new ProcessBuilder("cmd");  
builder.redirectErrorStream(true);  //将error和正常输出都转换到输出,用getInputStream都可以得到
Process process = builder.start();  
BufferedWriter pStdin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

pStdin.write(cmd);

pStdin.newLine();

pStdin.flush();
process.getOutputStream().close(); // 关掉输入流
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));  
String readLine = br.readLine();  
while (readLine != null) {  
   System.out.println(readLine);  //既有正常输出和error message。
   readLine = br.readLine();  
}  

如果去掉第二行标红的代码,执行时会报错,原因可能是process一直等待outputStream输入。
如果不加第一行标红代码,同事使用process.waitfor,也可能报错,原因可能是getErrorStream流和getInputStream流相互阻塞,所以最好将他们合并。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java