Scala:执行外部进程,字符串转义和错误

Jak*_* M. 1 scala lynx

我想执行以下命令:

lynx -useragent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1' -source 'http://localhost'
Run Code Online (Sandbox Code Playgroud)

作为Process在Scala中.我用过两个:

val cmd = ... // command to execute
cmd #> new java.io.File( filename ) !
Run Code Online (Sandbox Code Playgroud)

和:

val proc = Process( cmd )                                                  
proc !!
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都会收到以下错误lynx:

Can't Access `file://localhost/home/me/Work/23.lynx/2.multidownload/(X11;'
Alert!: Unable to access document.
Run Code Online (Sandbox Code Playgroud)

单独运行命令运行良好,当我在Scala中运行它时 - 我得到错误.这意味着Scala之间发生了一些奇怪的事情lynx,并且字符串没有被正确解释......任何想法?

Kim*_*bel 8

我猜你设置cmd为String.!!然后在每个空格字符处拆分字符串以获取传递给lynx的参数,而不是关心你的'角色.

import scala.sys.process._

val cmd = Seq("lynx",
              "-useragent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1'",
              "-source" "http://localhost")
val out = cmd.!!
Run Code Online (Sandbox Code Playgroud)