Использование scala sys.process с одинарными кавычками, пробелами, каналами и т. Д.
Я пытаюсь использовать scala.sys.process._, чтобы отправить запрос POST на мойChronos сервер с curl. Потому что в команде есть пробеларгументы, я используюSeq[String]
вариантcmd.!!
Я строю команду так:
val cmd = Seq("curl", "-L", "-X POST", "-H 'Content-Type: application/json'", "-d " + jsonHash, args.chronosHost + "/scheduler/" + jobType)
который производит, как и ожидалось,
cmd: Seq[String] = List(curl, -L, -X POST, -H 'Content-Type: application/json', -d '{"schedule":"R/2014-02-02T00:00:00Z/PT24H", "name":"Scala-Post-Test", "command":"which scalac", "epsilon":"PT15M", "owner":"[email protected]", "async":false}', localhost:4040/scheduler/iso8601)
Тем не менее, запуск этого, кажется, портит'Content-Type: application/json'
аргумент:
scala> cmd.!!
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 264 0 100 100 164 2157 3538 --:--:-- --:--:-- --:--:-- 54666
res21: String =
"The HTTP header field "Accept" with value "*/* 'Content-Type:application/json'" could not be parsed.
"
который я неТ понять. В отличие от вызоваcmd.mkString(" ")
и копирование + вставка в терминал работает как положено.
curl -L -X POST -H 'Content-Type:application/json' -d '{"schedule":"R/2014-02-02T00:00:00Z/PT24H", "name":"Scala-Post-Test", "command":"which scalac", "epsilon":"PT15M", "owner":"[email protected]", "async":false}' mapr-01.dev.quantifind.com:4040/scheduler/iso8601
Я пробовал многочисленные варианты аргумента -H безрезультатно, я не понял, как использовать одинарные кавычки в sys.process._ 'с !! будет принята с благодарностью.
Я также попробовал варианты на этом, который генерирует множество ошибок, в том числе
HTTP ERROR: 415
<p>Problem accessing /scheduler/iso8601. Reason:
</p><pre> Unsupported Media Type</pre><p></p>
Powered by Jetty://
(в дополнение к разделке jsonHash, т.е.
[1/6]: '"schedule":"R/2014-02-02T00:00:00Z/PT24H"' -->
curl: (6) Couldn't resolve host ''"schedule"'
Which makes me think it is not interpreting the -H argument correctly