Size: a a a

2018 November 25

DR

Dmitry Russ (Aleksandrov) in pro.elixir
System.cmd "elixir", ["-e", "IO.puts(:user, 'stdout');IO.puts(:standard_error, 'stderr');"]
stderr
     {"stdout\n", 0}
iex(3)> System.cmd "elixir", ["-e", "IO.puts(:user, 'stdout');IO.puts(:standard_error, 'stderr');"], stderr_to_stdout: true
{"stdout\nstderr\n", 0}
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
У меня меняется, но нет sassc, чтобы проверить какую может он ещё супернестандартную магию делает.
источник

RS

Roman Suleymanov in pro.elixir
мне по идее вообще бы как-то скормить вот такую строку
"echo #{sass_content} | sassc -t compressed"

но это прям возможно только так
'echo "#{sass_content}" | sassc -t compressed' |> String.to_charlist |> :os.cmd

но там все падает, если в sass_content внутри есть двойные кавычки
источник

RS

Roman Suleymanov in pro.elixir
не знаю как ескейпить их внутри контента
источник

RS

Roman Suleymanov in pro.elixir
иначе внутри файла только одинарные приходиться делать, что как-то так себе
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Roman Suleymanov
не знаю как ескейпить их внутри контента
как-то так, в зависимости от того какие escaping rules нужны:

  def escape(string) do
   for <<c <- string>>, into: "", do: escape_char(c)
 end

 defp escape_char(?\\), do: ~S|\\|
 defp escape_char(?/), do: ~S|\/|
 defp escape_char(?"), do: ~S|\"|
 defp escape_char(c), do: <<c>>
источник

RS

Roman Suleymanov in pro.elixir
~s, ~S не работают как надо, также только для одного какого-то вида кавычек
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Roman Suleymanov
точно также всё
Странно, потому что stderr_to_stdout для 99.9% всего софта, что знаю перенаправляет то, что оно пишет в stderr в переменную.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Roman Suleymanov
~s, ~S не работают как надо, также только для одного какого-то вида кавычек
Ну, я и говорю, что все эти escaping правила нужно самому кодить, как в моём примере выше...в зависимости от того, какие конкретно нужны. У нас их в проекте 3 своих самописных разных штуки, в зависимости от того куда данные идут дальше.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Вот такой есть для shell:

 def shell_encode(string) do
   string
   |> String.replace(~s(\\), ~s(\\\\))
   |> String.replace(~s(\"), ~s(\\"))
   |> String.replace(~s(\n), ~s(\\n))
 end
источник

RS

Roman Suleymanov in pro.elixir
нет не пишет так в переменную
источник

RS

Roman Suleymanov in pro.elixir
сейчас попробую shell_encode
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Roman Suleymanov
нет не пишет так в переменную
Убери into: IO.stream(:stdio, :line)
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
И запишет в переменную.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Roman Suleymanov
нет не пишет так в переменную
Вот этот into и отправляет дальше в консоль.

iex(1)> {stream, 0}= System.cmd "elixir", ["-e", "IO.puts(:user, 'stdout');IO.puts(:standard_error, 'stderr');"], into: IO.stream(:stdio, :line), stderr_to_stdout: true
stdout
stderr
{%IO.Stream{device: :standard_io, line_or_bytes: :line, raw: false}, 0}
iex(2)> {stream, 0}= System.cmd "elixir", ["-e", "IO.puts(:user, 'stdout');IO.puts(:standard_error, 'stderr');"], stderr_to_stdout: true
{"stdout\nstderr\n", 0}
источник

RS

Roman Suleymanov in pro.elixir
да, он так то пишет, но он вывод обрезает так если без into: IO.stream(:stdio, :line)
источник

RS

Roman Suleymanov in pro.elixir
я поэтому и добавил
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
В чем вывод обрезает?
источник

RS

Roman Suleymanov in pro.elixir
ну там большое содержимое файла
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
У меня не обрезанный, объясни поподробнее.
источник