开发者社区> 问答> 正文

将交互式Shell输出转换为纯文本

我正在尝试在具有Java的Linux机器上查看我的CPU的温度表。的代码,该位将显示其他命令壳输出,ls,cat file,但不会显示watch sensors,因为它返回一个交互式输出。有什么办法可以将其转换为纯文本吗?

Error: [/usr/bin/watch, sensors]

Error opening terminal: unknown.

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class tempapp{

public static void main (String args[]) throws IOException, InterruptedException {
    //build command
    List<String> commands = new ArrayList<String>();
    commands.add("/usr/bin/watch");
    //args
    commands.add("sensors");
    System.out.println(commands);

    ProcessBuilder pb = new ProcessBuilder(commands);
    pb.directory(new File("/home/ethano"));
    pb.redirectErrorStream(true);
    Process process = pb.start();

    //Read output
    StringBuilder out = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = null, previous = null;
    while ((line = br.readLine()) != null)
        if (!line.equals(previous)) {
            previous = line;
            out.append(line).append('\n');
            System.out.println(line);
        }

    //Check result
    if (process.waitFor() == 0){
        System.out.println("\n success");
        System.exit(0);
    }

    //weird termination
    System.err.println(commands);
    System.err.println(out.toString());
    System.exit(1);
    }
}

问题来源:Stack Overflow

展开
收起
montos 2020-03-28 09:14:34 521 0
1 条回答
写回答
取消 提交回答
  • 所有watch要做的就是sensors每两秒钟调用一次给定的命令(在这种情况下)。您只需让应用程序/usr/bin/sensors每两秒钟(或需要多次)调用一次for循环来模拟此行为,从而无需读取交互式shell输出。

    回答来源:Stack Overflow

    2020-03-28 09:14:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载