2010-06-17 12 views
25

Deseo emitir un comando del sistema nativo desde un programa Scala, y quizás interceptar el resultado. ("ls" viene a la mente. Puede haber otras formas de obtener información del directorio sin emitir el comando, pero eso está al lado de mi pregunta). Correspondería a os.system (...) en Python.Expedición de comandos del sistema nativo en Scala

He buscado en "Programación en Scala". He buscado en "Programming Scala" de O'Reilly. He buscado en Google varias combinaciones de términos. Sin suerte todavía. ¿Puede alguien darme un ejemplo o señalarme un recurso donde pueda encontrar un ejemplo?

+0

No debería marcar la respuesta correcta. Sería algo bueno de hacer y da a las personas que ven sus preguntas en el futuro un incentivo adicional para responder. :) –

+0

Hecho. Gracias por el recordatorio. – Tony

Respuesta

28

La mejor manera de hacerlo es usar scala.sys.process.

+1

Comentario de un usuario anónimo: verifique también 'scala.sys.process.Process'. – Anne

+0

@Anne Gracias, he actualizado la respuesta para señalar el ScalaDoc. Ese paquete * es * la biblioteca de procesos, que ha encontrado su camino en la biblioteca estándar. –

1

Scala no es diferente de Java en esta área, ya que puede llamar a cualquier función de API de Java utilizando las funciones de interoperabilidad de Scala. Ver por ejemplo, java.lang.ProcessBuilder.

0

Scala tiene una interoperabilidad completa con Java. Entonces puede llamar a los comandos del sistema desde Scala como lo haría desde Java. Consulte this para ver cómo llamar a los comandos del sistema desde Java.

+0

Ver las otras respuestas, la biblioteca de Scala hace las cosas mucho más conveniente. – Langley

4
import scala.sys.process._ 

val vimLocation: String = "whereis vim" !! 

reference

+0

el enlace de referencia está roto –

0

Puede hacerlo utilizando sys.process fácilmente:

Ejecución de comandos del sistema y obtener su código de estado (código de salida):

import sys.process._ 

val result = "your_command" ! 
println("result = "+result) // result contain zero for success or non zero for fail 

salida Llegar desde comandos del sistema:

import sys.process._ 

val result = "your_command" !! 
println("result = "+result) // result contain output from the command 

usted tiene varias otras opciones (tubería, redirección de la salida estándar, Anexar a STDOUT y ...), se puede ver this link.

Cuestiones relacionadas