我必须使用依赖于Gem的Ruby脚本。执行脚本时,将返回JSON对象。
我使用以下代码成功执行脚本。
<?php
$ruby = 'ruby ruby/teams.rb';
$res = system($ruby);
var_dump(json_decode($res, true));
以下是来自ruby/teams.rb
{"status"=>"active", "teamId"=>"XPLFKS59PK" }
我的问题是它直接打印到屏幕上,而不是在变量$res
中捕获。使用var_dump(json_decode($res, true))
时,我会null
。
我希望能够在$res
变量中捕获JSON响应,这样我就可以转换为数组并且值得使用数据。
如果有可能,有什么想法吗?
答案 0 :(得分:1)
我的问题是,它直接打印到屏幕上,而不是在变量$ res中捕获。
最有可能将其输出发送到stderr
而不是stdout
,因此您需要自己重定向流,如下所示:
$ruby = 'ruby ruby/teams.rb 2>&1';
有关流重定向的更多信息:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
或者,使用exec()
代替system()
答案 1 :(得分:0)
system
仅返回命令输出的最后一行。在你的情况下,我会使用exec
。您的代码看起来像下面的
$ruby = 'ruby ruby/teams.rb';
exec($ruby, $res);
var_dump(json_decode(implode("", $res), true));