gpt4 book ai didi

java - 使用 `Runtime.getRuntime().exec()` 从 `top` 获取输出

转载 作者:行者123 更新时间:2023-11-30 08:09:18 24 4
gpt4 key购买 nike

我想使用 Runtime.getRuntime().exec(String) 方法运行 top -n 1 命令并获取 top - 的输出n 1 进入我的 Java 程序。

我尝试了使用 BufferedReader 获取进程输出并使用返回的进程 InputStream 的标准方法,但没有返回任何数据。

我还尝试了以下...

        String path = "/home/user/Desktop/";
String cmd = "#!/bin/sh\ntop -n 1 > " + path + "output";
File shellCmd = new File(path + "topscript.sh");
PrintWriter writer = new PrintWriter(shellCmd);
writer.write(cmd);
writer.flush();
Runtime.getRuntime().exec("chmod +x " + shellCmd.getAbsolutePath());
Runtime.getRuntime().exec(shellCmd.getAbsolutePath());

创建 shell 脚本 和输出,但输出为空。但是,如果我随后加载我的 local shell 并运行上面代码生成的 script,我会在输出文件中得到正确的输出。

What's going wrong?

最佳答案

    String cmd = "#!/bin/sh\ntop -n1 -b > " + path + "output";
File shellCmd = new File(path + "topscript.sh");
PrintWriter writer = new PrintWriter(shellCmd);
writer.write(cmd);
writer.flush();
Runtime.getRuntime().exec("chmod +x " + shellCmd.getAbsolutePath());

ProcessBuilder pb = new ProcessBuilder(shellCmd.getAbsolutePath());
Map<String, String> enviornments = pb.environment();
enviornments.put("TERM", "xterm-256color");
Process process = pb.start();

BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader errorStreamReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String str = inputStreamReader.readLine();
System.out.println(str);
System.out.println(errorStreamReader.readLine());

使用 ProcessBuilder 设置 TERM 变量。

如果想将 top 重定向到文件。需要添加 -b 选项以避免 error: initializing curses

关于java - 使用 `Runtime.getRuntime().exec()` 从 `top` 获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549983/

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