2010-01-28 3 views

ответ

5
scala> scala.tools.nsc.io.Process("ls -1 /tmp | wc").stdout foreach println 
     41  63  770 

Или есть команда РЕПЛ:

scala> :sh cat /etc/passwd | wc 
stdout: List[String] = List(  65  185 3667) 

Доставки кода IO с 2,8 собиралось потребуется преодолеть больше стоп энергии, чем я могу бить, так что я положил все это в компиляторе. В scala.tools.nsc.io много полезных материалов.

3

Не совсем правильно даже сказать, что Java делает это из-за различной обработки процессов/потоков в разных операционных системах, большая часть этой функциональности фактически передается в собственный код.

Более интересный вопрос будет затем, чтобы спросить, если Scala имеет какой-либо способ работать более «идиоматический» с читателями и писателями (или каналами, если вы оборачивать ваши потоки с функциональностью NIO)

И ответ?

В настоящий момент в библиотеке scala IO работает работа на базе 2.8, это почти наверняка включает в себя лучший способ работы с потоками и каналами, но пока недоступен.

Вы также можете найти актеров, чтобы быть лучшим способом справиться с обычной практикой использования одного потока для ввода и одного потока для вывода при работе с процессом exec() 'd.

5

По Scala 2.9, вы можете сделать:

import scala.sys.process.Process 
println(Process("uname -a").!!.contains("x86_64")) 
Смежные вопросы