我如何编写环绕子进程并处理其输出的惯用kotlin代码?

时间:2017-08-24 06:52:22

标签: kotlin exec

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

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

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

FOOBAR 1234
BARFOO 54657
ETCETC 9876

假设第一行在5秒进入,然后第二行在10秒进入,第三行在15秒进行。

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

作为奖励,我很想知道如何从kotlin程序中终止子进程(带有SIGINT的信号?)。

1 个答案:

答案 0 :(得分: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()

这将导致List Pair s。 infix方法to创建Pair s,它们是简单的键值关联。