「出力リダイレクトに ProcessBuilder を使用する」
P粉517090748
2023-08-24 20:26:08
<p>次のコードを使用して、ProcessBuilder によって開始されたプロセスの出力をリダイレクトしようとしています。
<pre class="brush:php;toolbar:false;">ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
プロセス p = pb.start();
<p>しかし、例外がスローされて失敗しました: </p>
<ブロック引用>
<p>スレッド「メイン」で例外が発生しました
java.io.IOException: 実行できません
プログラム
"/myScript>>
/myLogFile
2>&1 <& - &": java.io.IOException:
エラー=2、そのようなファイルまたはディレクトリはありません
java.lang.ProcessBuilder.start(ProcessBuilder.java:460)</p>
</blockquote>
<p>「/myScript」を渡すだけで正常に動作します。 </p>
<p>スクリプトは perl ですが、失敗する理由について何か提案やコメントはありますか? </p>
<p><code>new ProcessBuilder("/myScript",">>","/myLogFile")</code> のような個別のパラメータとしてそれらを渡してみましたが、うまくいきましたが、にリダイレクトされませんログ ファイルも envVar も受け入れられません。 </p>
要件に従って、Java7 以降、引き続き ProcessBuilder を使用できます。実行可能ファイルをパラメータとして渡し、ProcessBuilder クラスで
redirectInput()
、redirectOutput()# を使用するだけです # # および
redirectError()を使用して、出力ストリームをリダイレクト/インターセプトします。
Shell リダイレクト演算子は
ProcessBuilder
では不明です。コマンドをシェル スクリプトに記述し、ここに示すように実行します。あるいは、ここ
に示すように bash -c を使用します。