perl调用ruby脚本使用反引号返回任何内容

时间:2011-06-03 18:44:36

标签: perl asterisk agi

好的,所以我有一个ruby脚本,它从FM Server中获取一些数据并返回一个元组。我不得不这样做,因为我知道没有好的perl FM模块。

[test.pl]

$ret = `ruby /root/rfm-query.rb $cid`;
@extens = split(/,/, $ret, 2);
print "DIAL SIP/$extens[0]";

因此,当我运行它时,它将按预期打印“DIAL SIP / 215”,但是当在Asterisk AGI脚本中使用相同的代码并使用$ extens [0]时,它总是不返回任何内容。

#!/usr/bin/env perl
use Asterisk::AGI;
$|=1;

$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();

$cid = substr $input{'callerid'}, 1;
$cid =~ s/\+//g;

$ret = `ruby /root/rfm-query.rb $cid`; #rets nothing
@extens = split(/,/, $ret, 2);

$AGI->exec("DIAL SIP/$extens[0]");

为什么它在测试脚本中有效但在AGI中无效?

1 个答案:

答案 0 :(得分:2)

我不确定Asterix AGI脚本是什么,但是如果它像CGI一样,你的代码由服务器运行,那么它可能像你一样以不同的用户身份运行。希望它是而不是root,它可能无法读取/root/rfm-query.rb

您可以尝试打开并打印文件进行阅读来检查。

my $rfm_query_file = "/root/rfm-query.rb";
open my $fh, "<", $rfm_query_file or die "Cant open $rfm_query_file: $!";

(如果您正在以root身份开发和测试代码,也会感到羞耻。)

相关问题