4

次のコードを使用して、ProcessBuilderの助けを借りて開始されたプロセスの出力をリダイレクトしようとしています

ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Process p = pb.start();

しかし、それは例外で失敗しました

スレッド"main"の例外java.io.IOException:プログラム "/ myScript >> / myLogFile 2>&1 <&-&"を実行できません:java.io.IOException:error = 2、java.langにそのようなファイルまたはディレクトリはありません.ProcessBuilder.start(ProcessBuilder.java:460)

「/myScript」を渡すだけで問題なく動作します

スクリプトはperlですが、なぜ失敗するのかについての提案/コメントはありますか?

それらすべてをのような個別の引数として渡してみましnew ProcessBuilder("/myScript",">>","/myLogFile")たが、実行されますが、ログファイルにリダイレクトされず、envVarsも使用されません。

4

2 に答える 2

8

シェルリダイレクト演算子は不明ProcessBuilderです。次に示すように、コマンドをシェルスクリプトに入れて、実行しますまたは、ここbash -cに示すように、を使用します。

于 2011-05-13T01:34:44.413 に答える
1

指定したように、Java7からは、実行可能ファイルのみをパラメーターとして使用してProcessBuilderを引き続き使用し、クラスを使用redirectInput() redirectOutput()して、クラスredirectError()から出力ストリームをリダイレクト/インターセプトできますProcessBuilder

于 2017-04-10T10:16:30.557 に答える