Estoy tratando de ver la tabla de temperaturas para mi CPU en mi máquina Linux con Java. Este trozo de código mostrará la salida de la shell para otros comandos, ls
, cat file
, pero no se mostrará watch sensors
a medida que retorna una salida interactiva. ¿Hay alguna manera de convertirlo en texto plano de alguna manera?
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);
}
}
Todo lo que watch
hace es llamar al comando es dado ( sensors
en este caso) una vez cada dos segundos. Simplemente puede tener su aplicación emular este comportamiento llamando /usr/bin/sensors
en un bucle por una vez cada dos segundos (o sin embargo muchas veces que necesita), por lo tanto, omitiendo la necesidad de leer la salida shell interactivo.