EventMachine EM.system在命令中丢失了转义的反斜杠

时间:2012-03-04 19:35:04

标签: ruby eventmachine yajl

我有以下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()而不是EM.system():

,这是输出
The cmd is ruby decoder.rb "{\"foo\":\"bar \\\"hello\\\"\"}"
Received {"foo":"bar \"hello\""}

任何人都知道为什么EM.system会删除转义的反斜杠,以及我如何绕过它?

0 个答案:

没有答案