2017-08-24 17 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,它们是简单的键值关联。

相关问题