我啓動了一個Process(通過java.lang.Runtime#exec,在Java 6,Linux上),爲此我只需要stdout。不幸的是,我運行的程序(ffmpeg)堅持使用進度信息來糾正錯誤。如果我不立刻從stderr讀取,stderr緩衝區會填滿,並且過程在一段時間後停頓。Java.lang.Process將errorstream重定向到/ dev/null
基本上我想要的是放棄stderr的任何輸出。我的建議
1)
ffmpeg -i .... .... 2>/dev/null
這工作,但意味着我必須給exec(字符串)在EXEC代替(字符串[]),這意味着我必須逃離我的參數,其中有在Java中沒有標準功能。我可以建立一個,但不喜歡。
2)
在一個包裝腳本,重定向輸出到/ dev/null使用上述FFMPEG命令。聽起來沒問題,但有一個bash腳本只是爲了這個似乎矯枉過正。
3)
附上ErrorStream爲好,啓動一個線程,什麼也不做,但閱讀()在errorstream。將工作,但看起來凌亂....
4) 使用Apache公共Exec ...我甚至沒有檢查文檔,看看這會工作,但導入整個庫只是爲了這麼簡單的任務也不覺得正確。
所以基本上我的問題是:有沒有更好的方法來做到這一點?如果不是,你認爲哪一個[最棒]最難看?
如果您在進程啓動後簡單地關閉錯誤流,會發生什麼情況 - 因此,告訴操作系統「我不希望進程正在寫入,將其丟棄」。 – Dunes 2012-03-23 12:09:57
有趣的想法。只是把它放在測試中,不幸的是它有同樣的問題。一段時間後,它只停下來,我只能將屬性指向stderr上的完整緩衝區。 – Claude 2012-03-23 14:49:55
糾正我以前的評論:採取errorstream並直接關閉它只是殺死子進程。 – Claude 2012-03-23 16:18:29