Yan Pujante
java.lang.Process
waitFor
sealed class ProcessResult { data class Out(val line: String) : ProcessResult() data class Err(val line: String) : ProcessResult() data class ExitValue(val exitValue: Int) : ProcessResult() } @OptIn(ExperimentalCoroutinesApi::class) fun Process.asFlow(charset: Charset = Charsets.UTF_8) : Flow<ProcessResult> { val process = this return channelFlow { coroutineScope { if(process.inputStream != null) { launch(<http://Dispatchers.IO|Dispatchers.IO>) { process.inputStream.use { for(line in it.bufferedReader(charset).lines()) { send(ProcessResult.Out(line)) } } } } if(process.errorStream != null) { launch(<http://Dispatchers.IO|Dispatchers.IO>) { process.errorStream.use { for(line in it.bufferedReader(charset).lines()) { send(ProcessResult.Err(line)) } } } } } send(ProcessResult.ExitValue(process.waitFor())) } }
elizarov
onExit().await()
Unresolved reference: await
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.5.0")
ProcessBuilder.start()
withContext(<http://Dispatchers.IO|Dispatchers.IO>) { ... }just in case
A modern programming language that makes developers happier.