EventMachine EM.system теряет экранированные обратные косые черты в команде - PullRequest
1 голос
/ 04 марта 2012

У меня есть следующий код Ruby, который использует EM.system для запуска второго скрипта Ruby:

json = Yajl::Encoder.encode(Yajl::Encoder.encode({:foo=>"bar \"hello\""}))
cmd = "ruby decoder.rb #{json}"
puts "The cmd is #{cmd}"
EM.run do
  EM.system(cmd) do |output, status|
    puts output
    EM.stop
  end
end

Второй скрипт (decoder.rb) делает это:

puts "Received #{ARGV[0]}"
begin
  Yajl::Parser.parse(ARGV[0])
rescue => e
  puts e
end

Вывод:

The cmd is ruby decoder.rb "{\"foo\":\"bar \\\"hello\\\"\"}"
Received {"foo":"bar "hello""}
lexical error: invalid char in json text.
                      {"foo":"bar "hello""}
                 (right here) ------^

Похоже, EM.system удаляет экранированные обратные слеши в "bar \" hello \ "".
Вот вывод, если я использую system () вместоof EM.system ():

The cmd is ruby decoder.rb "{\"foo\":\"bar \\\"hello\\\"\"}"
Received {"foo":"bar \"hello\""}

Кто-нибудь знает, почему EM.system удаляет экранированные обратные слеши и как я могу обойти это?

...