将linux命令行输出发送到另一个屏幕

时间:2016-12-21 18:36:59

标签: java linux debian gnu-screen

我想在我自己的java应用程序中读取正在运行的应用程序的所有输出。目前我有2个屏幕,第一个输出应用程序永久打印新信息,第二个打印java应用程序。遗憾的是,无法在一个屏幕上运行这两个应用程序。我的想法是将所有输出传递到java应用程序屏幕以在那里读取它,但我做错了或者它不起作用。

我的(测试)服务器如下所示:

public class Main {

public static void main(String[] args) throws InterruptedException {

    while (true) {
        Scanner scanner = new Scanner(System.in);
        String output = scanner.next();
        System.out.print("JAVA " + output);

    }
}

}

和我的linux启动文件如下:

#!/bin/bash

cd ../../raspberry-remote/

screen -dmS smarthome_javaserver #here runns the java  application
screen -dmS smarthome_receive | smarthome_javaserver  #send the output to the java screen

#start java app
screen -S smarthome_javaserver -p 0 -X stuff "java -jar ServerReceiver.jar^M"

#start receive tool
screen -S smarthome_receive -p 0 -X stuff "pilight-daemon -D^M"
screen -S smarthome_receive -p 0 -X stuff "pilight-daemon -D^M"


echo "started receiver"

任何人都知道如何实现这一点,还是有办法让他们在一个屏幕上运行?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我对此并不十分肯定,但我可以指出你正确的方向。首先,你必须使用“ProcessBuilder”启动你可以做的应用程序,在创建过程后,你需要一个输入流阅读器来读取输出。

在代码中它看起来像这样:

ProcessBuilder b = new ProcessBuilder("myapp");
Process app = builder.start();

//app is running now read its output
InputStreamReader stream = new InputStreamReader(app.getInputStream());

您现在可以使用BufferedReader读取我想要的app输出,该缓冲区具有更简单的界面。我总是从这样的流中读到:

BufferedReader br = new BufferedReader(stream))

for(String line; (line = br.readLine()) != null; ) 
{
   ProcessLine(line);
}

我希望这能帮到你一点点。