私はいくつかのbashスクリプトを実行し、ターミナル出力を文字列に格納するためにjavaを使用しようとしました。しかし、多くのコマンドがこのように動作しません。それはコマンドが見つからないことを示し続けるが、私はこれらのコマンドをターミナルで正しく実行することができる、ex node --version、go --version。私はパスの問題だと思うが、それを修正する方法は考えていない。java実行bashスクリプト、コマンドが見つかりません
「python --version」を実行すると「Python 2.7.10」が表示されますが、getErrorStreamに表示されます。誰も私にいくつかのヒントを与えることができますか?
public static void runscript() throws IOException {
Runtime rt = Runtime.getRuntime();
String[] commands = { "/bin/bash", "-c", "node --version" };
Process proc = null;
try {
proc = rt.exec(commands);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
}
あなたが名前だけでなく、コマンドのフルパスを与えて試すことができます。 "どのノード"があなたにパスを与えますか?あなたのJavaコードでそれを使ってみてください。また、端末からの差異を見るためにjavaから$ PATHをエコーする価値があります。 –
"getErrorStream"について:あなたが知っているように、プログラムが情報の印刷に使うかもしれない2つのストリームがあります。プログラム自体がどちらを使用するかを決定します。何を印刷するかについての公式なガイダンスはかなりありますが、これはしばしば正確には処理されません。あなたのケースでは、Pythonは明らかにそれを行います... – EagleRainbow
@VishalKamat私は以下でそれを返信します。素晴らしいと役に立つコメントありがとう! – user3390980