处理使用Java程序运行的Bash命令的输入

时间:2016-07-01 20:36:41

标签: java bash

我使用以下对象,通过我的Java代码运行bash命令。

public class Scripter {
    private final String[] ENV = {"PATH=/bin:/usr/bin/"};

    private String cmd;
    private Process process;

    public Scripter(String cmd) throws IOException {
        this.cmd = cmd;
        process = Runtime.getRuntime().exec(cmd, ENV);
    }
}

现在我调用此对象并尝试在此函数中打印输出。

public static void main(String[] args) {
    Scripter gitCheck;

    try {
        gitCheck = new Scripter("git --version");
    } catch (IOException e) {
        e.printStackTrace();
    }
    Scanner sc = new Scanner(System.in);
    if (sc.hasNext()) {
        System.out.println(sc.next());
    }
}

程序无限循环,什么都不做。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在尝试从Java进程的标准输入中读取字符串:

Scanner sc = new Scanner(System.in);
if (sc.hasNext()) { ... }

因此,您的Java程序将阻塞,直到您实际将某些内容传递到其标准输入或关闭标准输入。

(这不是一个无限循环,它与git命令无关)

如果您正在尝试阅读git命令的输出,则需要阅读process.getInputStream()而不是System.in