-
Process阻塞原因
- 输入流和错误流分开的,没有处理,缓存堆积就会发生阻塞,归根结底本质上是io阻塞问题
-
Process.getInputStream
- 获取子进程中的标准输出
-
Process.getErrorSteam
- 获取子进程中的标准错误输出
-
Process原理
- 使用Runtime.getRuntime().exec("cmd")会在当前进程建立一个子进程,子进程由于没有控制台,它的标准输出和标准错误就会返回给父进程Process,因此通过getInputStream和getErrorStream就可以获取到这些信息
-
最佳解决办法
String s;
String shellCmd = "python demo.python Tom 18 male"
String[] shellCmd1 = shellCmd.split(" ");
ProcessBuilder builder = new ProcessBuilder(shellCmd1);
builder.redirectErrorStream(true); //将子进程的标准错误流与标准输出流合并
process = builder.start();
// 获取子进程的标准输出
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((s = bufferedReader.readLine()) != null) {
System.out.println(s);
}
int resultCode = process.waitFor();
System.out.println(resultCode);
- 注意: 使用new ProcessBuilder(shellCmd1)时, shellCmd1必须被转化为字符串数组, 否则会报"python demo.python Tom 18 male" file or directory not found的错误
网友评论