具有输入/输出流的Java进程

具有输入/输出流的Java进程

下面有下面的代码示例。可以向bashshell输入命令,即echo test结果回显了。然而,在第一次阅读之后。其他输出流不工作?

这是为什么,还是我做错了什么?我的最终目标是创建一个线程调度任务,该任务定期执行/bash命令,因此OutputStreamInputStream必须协同工作而不是停止工作。我也经历过这个错误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);

}


翻过高山走不出你
浏览 476回答 3
3回答

斯蒂芬大帝

我认为您可以使用像魔鬼线程这样的线程来读取您的输入,并且您的输出读取器已经在主线程的while循环中,这样您就可以同时读写,您可以这样修改您的程序:Thread T=new Thread(new Runnable() {     @Override     public void run() {         while(true)         {             String input = scan.nextLine();             input += "\n";             try {                 writer.write(input);                 writer.flush();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     }} );T.start();你可以读到和上面一样的。while ((line = reader.readLine ()) != null) {     System.out.println ("Stdout: " + line);}让你的作者成为终结者,否则它将无法被内部类访问。

慕村225694

你有writer.close();在你的密码里。所以bash在它的stdin和出口。然后你得到Broken pipe当尝试从stdout已经灭绝的巴什。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java