2016-01-10 50 views
1

我想處理通過createProcess linewise啓動的進程的stdout,但我不能等到有新行可用時。我的應用程序會做這樣的事情:Haskell - 無阻擋地從句柄中讀取行

  1. 獲得一些外部程序的輸出全部爆滿線可用,而無需等待
  2. 啓動一旦任務完成即處理這些線
  3. 工作,等待直到外部程序的輸出的至少一條線可重複

我不知道如何實現1.是否存在相當於在每行的基礎上運行HandlehGetBufNonBlocking?如果沒有,Haskell™解決這個問題的方法是什麼?使用hReadyhGetChar來實現自定義行緩衝或某種形式的併發?

+0

'但我不能等到有新的一行可用的時候'你的意思是說你想在生成時處理該行,可能沒有完全保存在內存中? – danidiaz

+0

不,我只想處理整行。我編輯了這個帖子以供澄清。 –

回答

1

一點修修補補我想出了這個之後,希望它可以幫助你:

dealWithLine :: String -> IO() 
dealWithLine l = putStrLn $ l ++ "; length: " ++ (show $ length l) 

main = getContents >>= (\s -> mapM dealWithLine $ lines s) 

你的主要功能是getContents這需要輸入的,則沒有阻止,您可以將其提供給任何你想要處理stdin的函數。