如何在Scala actor中执行(exec)外部系统命令?

时间:2014-08-16 11:16:47

标签: scala actor

运行外部命令,我应该

import sys.process._
val result="ls a" !

然后当使用演员时,我还需要使用"!"发送消息。所以!是在actor和进程中定义的,但是我需要在同一个代码块中使用它们,怎么做?

2 个答案:

答案 0 :(得分:2)

我没有看到ProcessActorRef都定义了具有相同名称的方法的问题。

模拟示例是

class A { def ! = println("A") }
class B { def ! = println("B") }
val a = new A
val b = new B
a.! // "A"
b.! // "B"

根本没有名称冲突或含糊不清。

您唯一需要担心的是从StringProcess的隐式转换。

"foo".!有效,因为ProcessString可隐式转换为定义!方法的唯一类。

正如文档所说,如果您改为使用类似"foo".lines的内容,那么编译器就会混淆,因为它不知道是将String转换为Process还是转换为{{1因为两者都定义了StringLike方法。

但是 - 再次 - 这不是你的情况,你可以安全地做一些事情:

lines

并且编译器不应该抱怨。

答案 1 :(得分:-1)

此类案例的recommended方法似乎只是导入Process对象:

import scala.sys.process.Process
Process("find src -name *.scala -exec grep null {} ;") #| Process("xargs test -z") #&& Process("echo null-free") #|| Process("echo null detected") !

在你的情况下:

import scala.sys.process.Process
Process("ls a")