Scala: выполнение внешнего процесса, экранирование строк и ошибки

Я хочу выполнить следующую команду:

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

как Process в Скале. Я использовал оба:

val cmd = ... // command to execute
cmd #> new java.io.File( filename ) !

а также:

val proc = Process( cmd )                                                  
proc !!

И в обоих случаях я получаю ошибки от lynx:

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

Команда запуска в одиночку работает хорошо, когда я запускаю ее в Scala - я получаю ошибки. Что означает, что между Scala и lynxи строки неправильно интерпретируются... Есть идеи?

1 ответ

Решение

Я предполагаю, что вы установили cmd в строку. !! затем разделяет строку на каждый символ пробела, чтобы получить аргументы для передачи 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.!!
Другие вопросы по тегам