Eseguire comandi con Kotlin e NuProcess
La libreria NuProcess ci permette di eseguire comandi e processi in Kotlin sostituedo le classi standard.
E' multipiattaforma, ma io l'ho testata solo su Linux.
Se usate Maven aggiungete questa dipendenza:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>nuprocess</artifactId>
<version>2.0.4</version>
<scope>compile</scope>
</dependency>
Dopo di create una classe che estende NuAbstractProcessHandler:
import com.zaxxer.nuprocess.NuAbstractProcessHandler
import com.zaxxer.nuprocess.NuProcess
import java.nio.ByteBuffer
class MyProcess : NuAbstractProcessHandler() {
private var nuProcess: NuProcess? = null
override fun onStart(nuProcess: NuProcess?) {
this.nuProcess = nuProcess
}
override fun onStdinReady(buffer: ByteBuffer): Boolean {
buffer.put("Nel caso non ci siano dati, stampo questo!".toByteArray())
buffer.flip()
return false
}
override fun onStdout(buffer: ByteBuffer, closed: Boolean) {
if (!closed) {
val bytes = ByteArray(buffer.remaining())
buffer.get(bytes)
println(String(bytes))
nuProcess!!.closeStdin(true)
}
}
}
Richiamiamo tutto così:
import com.zaxxer.nuprocess.NuProcessBuilder
import java.util.concurrent.TimeUnit
fun main(args: Array<String>) {
try {
val pb = NuProcessBuilder(listOf("ls", "-la"))
val handler = MyProcess()
pb.setProcessListener(handler)
val process = pb.start()
process.wantWrite()
process.waitFor(0, TimeUnit.SECONDS)
} catch (e: InterruptedException) {
throw RuntimeException(e)
}
}
In questo caso abbiamo richiamato ls, indicando qualche opazione come altro elemento della lista.
Inoltre come parametro del waitFor abbiamo mezzo 0, che significa infinito.
Enjoy!
kotlin maven nuprocess nuabstractprocesshandler
Commentami!