我从我发出的一些数据中创建了一些json,当我将存储在变量中的json传递给另一个脚本(在python中创建)时,我注意到json元素不再是双引号
json = @report.resultReportToJSON(result_type, result, unit)
puts "#{json}"
`"python ./post_request.py --json '#{json}'"`
我的输出是这样的。从看来是:
{"test_name":"Launch","requester":"foo","device_serial":"1234"}
和执行的命令(我们有一些输出命令的日志记录)是
post_request.py --relative_path '/api/benchmark/' --json '{test_name:Launch,requester:foo,device_serial:1234}'
您可以注意到双引号已经消失
答案 0 :(得分:1)
使用system
:
system "python", "./post_request.py", "--json", json
由于反引号命令由/ bin / sh执行,因此双引号会被shell吞噬。使用system
可以让您免于使用引号来猜测游戏:
$ irb
irb(main):001:0> json = '{"test_name":"Launch","requester":"foo","device_serial":"1234"}'
=> "{\"test_name\":\"Launch\",\"requester\":\"foo\",\"device_serial\":\"1234\"}"
irb(main):002:0> puts `echo #{json}`
test_name:Launch requester:foo device_serial:1234
=> nil
irb(main):003:0> puts `echo "#{json}"`
{test_name:Launch,requester:foo,device_serial:1234}
=> nil
irb(main):004:0> puts `echo '#{json}'`
{"test_name":"Launch","requester":"foo","device_serial":"1234"}
=> nil
irb(main):005:0> system "echo", json
{"test_name":"Launch","requester":"foo","device_serial":"1234"}
=> true
答案 1 :(得分:0)
试试这个:
require 'json'
`"python ./post_request.py --json '#{json.to_json}'"`
这可能有助于确保在转换为系统命令时使用转义引号序列化对象。