Eseguire comandi con Kotlin e NuProcess

Mattepuffo's logo
Eseguire comandi con Kotlin e NuProcess

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!


Condividi

Commentami!