我想写一些基本上运行命令的kotlin代码:
Runtime.getRuntime().exec("mycommand.sh")
但是,在这种情况下,mycommand.sh
永远不会退出。它会偶尔输出我想要处理的文本。想象一下输出是这样的:
FOOBAR 1234
BARFOO 54657
ETCETC 9876
假设第一行在5秒进入,然后第二行在10秒进入,第三行在15秒进行。
我如何编写接收每行的代码并处理它? 例如,也许我想提取所有大写字样并提取后面的数字,然后将这两段文本作为键值存储在哈希映射中。
作为奖励,我很想知道如何从kotlin程序中终止子进程(带有SIGINT的信号?)。
答案 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,它们是简单的键值关联。