2017-08-24 16 views
1

我想寫基本上運行一個命令,一些科特林代碼:我將如何編寫遍歷子流程並處理其輸出的慣用kotlin代碼?

Runtime.getRuntime().exec("mycommand.sh") 

但是,在這種情況下mycommand.sh永遠不會退出。它將零星地輸出我想要處理的文本。假設輸出是這樣的:

FOOBAR 1234 
BARFOO 54657 
ETCETC 9876 

假設第一行進入5秒,然後第二行進入10秒,第三行進入15秒。

我該如何編寫接收每行的代碼,並處理它? 例如,也許我想提取所有大寫的單詞,並提取後面的數字,然後將這兩段文本存儲爲散列映射中的鍵值。

作爲獎勵,我很想知道如何從kotlin程序中終止子進程(signal with SIGINT?)。

回答

1

也許是這樣的:

val inStream = BufferedReader(InputStreamReader(proc.inputStream)) 
val map = inStream.lines() 
       //maybe you need a more sufficient solution here 
       .map { it.split(" ") } 
       .map { it[0] to it[1] }.toList() 

這將導致PairList一個當時的。 infix方法to創建了Pair s,它們是簡單的鍵值關聯。

相關問題