JavaのProcessBuilderを:それをリダイレクトするのではなく、出力を抑止する方法

サディク:

私は、コマンドを実行し、出力をリダイレクトするProcessBuilderをを使用しています。私は今、全く出力を持たないために可能性を追加します。

もちろん私は、ファイルにリダイレクトすることもできますが、これは、ユーザーのシステム上の不要なファイルを残すでしょう。

私はその解決策を探しています

  • Windowsの(例えばは/ dev / nullにリダイレクトしていない)を含むすべてのプラットフォームで動作し、
  • (例えばnullにリダイレクトし、例外を無視する)キャッチをしようと誤用していません

私は見つけることができる唯一の方法は、このでした:

ProcessBuilder processBuilder = new ProcessBuilder(command);
if (suppressOutput) {
        processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}

しかし、文字通りではない根本的なシェルへのプリントは「出力なし」という。

ここでは、出力surpressedないとProcessBuilderを私の使用は次のとおりです。

ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(new File(workingdir));
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();

while (process.isAlive()) {
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) { }
    // check for termination request
    if (terminationRequest()) {
        process.destroy();
        return -1;
    }
}
return process.exitValue();
Laksitha Ranasingha:

DISCARDあなたは、Javaをアップグレードする場合はそれを使用することができredirectオプションは、Java 9で追加されました。ので、そうでなければ、単にその振る舞いを再現できDISCARDリダイレクト列挙型は、以下のようにヌルデバイスにリダイレクトするファイルのインスタンスを使用しています。

   private static File NULL_FILE = new File(
          (System.getProperty("os.name")
                     .startsWith("Windows") ? "NUL" : "/dev/null")
   );

その後、オーバーロードされた使用できるredirectOutput方法を。

if (suppressOutput) {
   processBuilder.redirectOutput(NULL_FILE);
}

これは、Java 9の動作と同じです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178179&siteId=1