2012-04-12 25 views
0

我正在使用Groovy編寫包裝腳本(但問題實際上是一個Java),並且想知道是否可以創建一個Process而不讓它先運行。問題在於進程開始運行並在stdout和stderr上生成輸出。我想將它們轉發到適當的目的地,同時創建一個合併流以便在腳本中進行處理。但是,我遇到的問題是,進程產生的輸出過快,前兩行的輸出有點亂碼。我想在流程開始運行之前設置流。任何方式來做到這一點?任何方式來延遲流程執行?

+1

你可以張貼到目前爲止你已經嘗試過什麼是片段? – 2012-04-12 20:57:16

+0

Thread.sleep()不適合你嗎? – CodeBlue 2012-04-12 20:57:58

+0

你也可以看看Thread.join()。 – 2012-04-12 21:00:21

回答

0

這會消耗輸出和錯誤流分成兩個獨立的StringWriters,但我沒有看到任何「亂碼」

new StringWriter().with { out -> 
    new StringWriter().with { err -> 
    'ls /tmp'.execute().with { proc -> 
     consumeProcessOutput(out, err) 
     waitFor() 
    } 
    println "OUT: $out" 
    println "ERR: $err" 
    } 
} 
+0

感謝您的嘗試,但在實踐中,ProcessProcessOutput()調用有機會做任何事情之前,Process仍然開始運行。它不是很長,但也是可變的 - 例如,假設一個GC發生在兩者之間。 – dromodel 2012-04-13 19:33:18

+0

但是這個過程應該寫入流,這就是爲什麼如果你不消耗它們的東西可以開始掛起...你有一個例子,我們可以運行,展示你看到的問題? – 2012-04-13 20:07:28