gpt4 book ai didi

java - 使用运行时 java 获取命令输入

转载 作者:行者123 更新时间:2023-12-01 09:13:11 30 4
gpt4 key购买 nike

你好,我尝试从这个命令获取java中的输入:“ps aux | grep java”我使用此代码但不起作用:

        Process process = Runtime.getRuntime().exec("ps aux | grep java");
InputStream stdin = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);

String line = null;
System.out.println("<OUTPUT>");

while ((line = br.readLine()) != null) {
System.out.println(line);
}

System.out.println("</OUTPUT>");
int exitVal = process.waitFor();
System.out.println("Process exitValue: " + exitVal);

控制台输出:进程退出值:1有什么想法吗?

最佳答案

当您将单个字符串传递给 Runtime.getRuntime().exec() 时,它需要一个命令及其参数,这些命令及其参数会自动标记化。换句话说,你的代码相当于执行这个命令:

ps 'aux' '|' 'grep' 'java'

看看 |grepjava 是如何作为参数传递给 ps 的?这就是问题所在。

我建议使用ProcessBuilder相反,通过 bash 运行命令:

Process process = new ProcessBuilder().command("bash", "-c", "ps aux | grep java").start()

这相当于以下命令:

bash -c 'ps aux | grep java'

现在,bash 子进程处理 psgrep 之间的管道,因此它应该可以正常工作。

您可以使用 Runtime.getRuntime().exec() 执行相同的操作,但 ProcessBuilder 是一个更新、更干净的界面,因此可能应该是 new 的首选代码。 (ProcessBuilder 实际上只是相对新的,因为它是在 JDK1.5 中添加的,而 exec() 方法自 JDK1.0 以来就存在.)

关于java - 使用运行时 java 获取命令输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40790627/

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