次のオブジェクトを使用して、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());
}
}
プログラムは無限ループになり、何もしません。私はここで間違って何をしていますか?
コードにループがありません。 – shmosel
このプログラムの標準入力には何が入っていますか? (gitコマンド、Javaプログラムではない)あなたはそれを読んでいる。あなたが何かをパイプしないで(そしてそれを閉じると)、無限にブロックされます(無限ループではありません)。 –
無限ループではなく、 'sc.next()'に何かを入力するのを待っています。 'ProcessBuilder'とプロセスの入出力ストリームを取得する方法について読んでおく必要があります。 'System.in'は魔法のようにプロセスにアタッチされません。 –