我正在尝试使用Scala中的外部程序,该程序接受来自标准输入流的输入。
代码大致相当于Linux上的以下运行,但在Windows上运行时引发异常(在Windows 7上测试)。异常的描述表明找不到echo命令。
def invokeProgram(data : String) {
import scala.sys.process._
val cmdEcho = Seq("echo", data)
val cmdProgram = Seq("program")
println((cmdEcho #| cmdProgram).!!)
}
代码在Linux上正常运行但是在Windows上描述失败,但echo命令对于两个平台都是通用的,并且它的用法在语法上与我的目的相同。这是回声不在PATH中这么简单吗?在Windows上是否有单独的echo.exe或是否捆绑到其他东西?可以使被调用的程序接受来自临时文件的输入,如果我无法解决此问题,我会回复它。
答案 0 :(得分:4)
区别在于:
dcs@shadowfax:~$ which echo
/bin/echo
也就是说,在Unix上,echo
命令实际上是一个二进制文件,尽管大多数shell都将它实现为内置命令。另一方面,在Windows上,没有名为echo.exe
(或echo.com
等)的二进制文件。它只是shell的内置命令。
答案 1 :(得分:1)
您根本不需要使用echo
。相反,使用#< ProcessBuilder的方法。这是一个例子:
import java.io.ByteArrayInputStream
import scala.sys.process._
val data = "hello"
val is = new ByteArrayInputStream(data.getBytes)
"cat" #< is ! //complicated way to print hello