【发布时间】:2011-04-08 07:41:37
【问题描述】:
我在下面有以下代码示例。您可以在其中向 bash shell 输入命令,即echo test 并返回结果。然而,在第一次阅读之后。其他输出流不起作用?
为什么会这样或者我做错了什么?我的最终目标是创建一个线程计划任务,该任务定期向 /bash 执行命令,因此 OutputStream 和 InputStream 必须协同工作而不会停止工作。我也一直遇到错误java.io.IOException: Broken pipe 有什么想法吗?
谢谢。
String line;
Scanner scan = new Scanner(System.in);
Process process = Runtime.getRuntime ().exec ("/bin/bash");
OutputStream stdin = process.getOutputStream ();
InputStream stderr = process.getErrorStream ();
InputStream stdout = process.getInputStream ();
BufferedReader reader = new BufferedReader (new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
String input = scan.nextLine();
input += "\n";
writer.write(input);
writer.flush();
input = scan.nextLine();
input += "\n";
writer.write(input);
writer.flush();
while ((line = reader.readLine ()) != null) {
System.out.println ("Stdout: " + line);
}
input = scan.nextLine();
input += "\n";
writer.write(input);
writer.close();
while ((line = reader.readLine ()) != null) {
System.out.println ("Stdout: " + line);
}
【问题讨论】:
-
"Broken pipe" 可能意味着子进程已经退出。尚未完全查看您的其余代码以了解其他问题。
-
使用单独的线程,它会工作得很好