gpt4 book ai didi

java - 将交互式 shell 输出转换为纯文本

转载 作者:行者123 更新时间:2023-12-01 17:59:47 24 4
gpt4 key购买 nike

我正在尝试使用 Java 查看 Linux 机器上 CPU 的温度表。这段代码将显示其他命令、lscat file 的 shell 输出,但不会显示 watch 传感器,因为它返回一个交互式输出。有没有办法可以将其转换为纯文本?

错误:[/usr/bin/watch,传感器]

打开终端时出错:未知。

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);
}
}

最佳答案

watch 所做的就是每两秒调用一次给定的命令(在本例中为sensors)。您可以简单地让您的应用程序通过每两秒(或您需要的多次)在 for 循环中调用 /usr/bin/sensors 来模拟此行为,因此无需读取交互式 shell输出。

关于java - 将交互式 shell 输出转换为纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com