Perl-вызов ruby-скрипта с использованием backticks ничего не возвращает - PullRequest
2 голосов
/ 03 июня 2011

Хорошо, у меня есть скрипт ruby, который берет некоторые данные с FM-сервера и возвращает кортеж. Я должен был сделать это, потому что нет хорошего 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 Ответ

2 голосов
/ 04 июня 2011

Я не уверен, что такое сценарий 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.)

...