我将如何编写循环遍历子流程的惯用kotlin代码并处理它的输出?

我想写一些本质上运行命令的kotlin代码:

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

但是,在这种情况下, mycommand.sh将永远不会退出。 它会零星地输出我想要处理的文本。 想象一下,输出是这样的:

 FOOBAR 1234 BARFOO 54657 ETCETC 9876 

说第一行在5秒,第二行在10秒,第三在15秒。

我将如何编写接收每行的代码并对其进行处理? 例如,也许我想提取所有大写的单词,并提取后面的数字,然后将这两个文本作为键值存储在哈希映射中。

作为奖励,我很想知道如何从kotlin程序中终止子进程(signal with SIGINT?)。

也许这样的事情:

  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() 

这将产生一个List Pairto创建Pair的中infix方法,它们是简单的键值关联。

Interesting Posts