2

我正在尝试使用 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 命令对两个平台都是通用的,并且它的用法在语法上对于我的目的是相同的。这就像 echo 不在 PATH 中一样简单吗?Windows 上什至有单独的 echo.exe 还是捆绑到其他东西中?可以使调用的程序从临时文件中接受其输入,如果我无法解决此问题,我将使用该文件。

4

2 回答 2

4

区别在于:

dcs@shadowfax:~$ which echo
/bin/echo

也就是说,在 Unix 上,该echo命令实际上是一个二进制文件,尽管大多数 shell 将其实现为内置命令。另一方面,在 Windows 上,没有称为echo.exe(或echo.com等)的二进制文件。它只是 shell 的内置命令。

于 2012-08-15T20:33:31.247 回答
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
于 2012-08-15T10:33:51.803 回答