为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻过高山走不出你 2019-06-16 13:32:31
具有输入/输出流的Java进程下面有下面的代码示例。可以向bashshell输入命令,即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);}
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我认为您可以使用像魔鬼线程这样的线程来读取您的输入,并且您的输出读取器已经在主线程的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);}

让你的作者成为终结者,否则它将无法被内部类访问。


查看完整回答
反对 回复 2019-06-16
?
慕村225694

TA贡献1880条经验 获得超4个赞


你有writer.close();在你的密码里。所以bash在它的stdin和出口。然后你得到Broken pipe当尝试从stdout已经灭绝的巴什。


查看完整回答
反对 回复 2019-06-16
  • 3 回答
  • 0 关注
  • 474 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信