使用Runtime Java获取命令输入



你好,我尝试从此命令中获取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是一个更新的,更清洁的接口,因此对于新代码来说可能应该优选。(ProcessBuilder实际上只是相对 new,因为它是在JDK1.5中添加的,而exec()自JDK1.0以来就存在。)

最新更新