varios ejemplo ejecutar desde consola comandos comando exec kotlin

exec - ejemplo - ¿Cómo invocar un comando externo desde el código Kotlin?



ejecutar varios comandos cmd desde java (4)

Quiero invocar un comando externo desde el código Kotlin. En C / Perl, usaría la función system (); En Python, usaría el módulo de subproceso; En Go, usaría use os / exec; y etc. Pero, ¿cómo hago esto en Kotlin?


Basado en la respuesta de @jkschneider pero un poco más de Kotlin-ified:

fun String.runCommand(workingDir: File = File("."), timeoutAmount: Long = 60, timeoutUnit: TimeUnit = TimeUnit.SECONDS): String? { return try { ProcessBuilder(*this.split("//s".toRegex()).toTypedArray()) .directory(workingDir) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) .start().apply { waitFor(timeoutAmount, timeoutUnit) }.inputStream.bufferedReader().readText() } catch (e: IOException) { e.printStackTrace() null } }


Ejemplo de ejecutar un git diff mediante el desmonte:

"git diff".runCommand(gitRepoDir)

Aquí hay dos implementaciones de la función de extensión runCommand :

1. Redirigir a stdout / stderr

Esto conecta cualquier salida del subproceso a stdout y stderr regulares:

fun String.runCommand(workingDir: File) { ProcessBuilder(*split(" ").toTypedArray()) .directory(workingDir) .redirectOutput(Redirect.INHERIT) .redirectError(Redirect.INHERIT) .start() .waitFor(60, TimeUnit.MINUTES) }

2. Capturando la salida como una cadena

Una implementación alternativa que redirige a Redirect.PIPE lugar le permite capturar resultados en una String :

fun String.runCommand(workingDir: File): String? { try { val parts = this.split("//s".toRegex()) val proc = ProcessBuilder(*parts.toTypedArray()) .directory(workingDir) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) .start() proc.waitFor(60, TimeUnit.MINUTES) return proc.inputStream.bufferedReader().readText() } catch(e: IOException) { e.printStackTrace() return null } }


Para Kotlin Native:

platform.posix.system("git status")

Para JVM

Runtime.getRuntime().exec("git status")


Si está ejecutando en la JVM, puede usar el método exec Java Runtime. p.ej

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

Necesitará tener permiso de seguridad para ejecutar comandos.