使用scala.sys.process在Windows 7上调用echo

时间:2012-08-15 10:19:06

标签: shell scala windows-7 cross-platform dos

我正在尝试使用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或是否捆绑到其他东西?可以使被调用的程序接受来自临时文件的输入,如果我无法解决此问题,我会回复它。

2 个答案:

答案 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