2010-06-17 11 views
25

Chcę wydać polecenie systemu rodzimego z programu Scala i być może przechwycić dane wyjściowe. ("ls" przychodzi na myśl. Mogą istnieć inne sposoby uzyskania informacji katalogowych bez wydawania polecenia, ale to jest poza kwestią mojego pytania.) Odpowiada to os.system (...) w Pythonie.Wydawanie natywnych poleceń systemowych w Scali

Zajrzałem do "Programowanie w Scali". Spojrzałem w "Programming Scala" O'Reilly'ego. Zrobiłem kilka kombinacji haseł. Bez szczęścia. Czy ktoś może mi podać przykład lub wskazać mi źródło, w którym mogę znaleźć przykład?

+0

Nie należy oznaczać prawidłowej odpowiedzi. Byłoby to przyjemne i dawało ludziom, którzy widzą twoje pytania w przyszłości, dodatkową motywację do odpowiedzi. :) –

+0

Zrobione. Dzięki za przypomnienie. – Tony

Odpowiedz

28

Najlepszym sposobem na to jest użycie scala.sys.process.

+1

Komentarz użytkownika anonimowego: Sprawdź także "scala.sys.process.Process". – Anne

+0

@Anne Dzięki, zaktualizowałem odpowiedź, aby wskazać ScalaDoc. Ten pakiet * to * biblioteka procesów, która trafiła do biblioteki standardowej. –

1

Scala nie różni się od Java w tym obszarze, ponieważ można wywoływać dowolne funkcje interfejsu Java API za pomocą funkcji współdziałania Scali. Zobacz na przykład: java.lang.ProcessBuilder.

0

Scala ma pełną zgodność operacyjną z Javą. Możesz więc wywoływać polecenia systemowe ze Scala, podobnie jak w Javie. Zobacz this, aby zobaczyć, jak wywoływać polecenia systemowe z Java.

+0

Zobacz inne odpowiedzi, biblioteka Scala sprawia, że ​​rzeczy są znacznie wygodniejsze. – Langley

4
import scala.sys.process._ 

val vimLocation: String = "whereis vim" !! 

reference

+0

Link referencyjny jest uszkodzony –

0

Można to zrobić za pomocą sys.process łatwo:

Wykonywanie poleceń systemowych i uzyskiwanie ich kod statusu (kod wyjścia):

import sys.process._ 

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

Pierwsze wyjście z polecenia systemowe:

import sys.process._ 

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

Masz kilka innych opcji (rurociąg, przekierowywać STDOUT, dołącz do STDOUT i ...), można zobaczyć this link.