如何让一个perl脚本调用另一个并获得返回结果



我如何让一个perl脚本调用另一个perl脚本并获得返回结果?

我有perl脚本B,它做了很多数据库工作,什么都不打印,只需用0或3退出即可。

所以我希望perl脚本A调用脚本B并得到它的结果。但当我打电话给时

my $result = system("perl importOrig.pl filename=$filename");

my $result = system("/usr/bin/perl /var/www/cgi-bin/importOrig.pl filename=$filename");

我得到了一个-1,脚本B从未被调用。

我已经调试了脚本B,当手动调用时没有出现任何故障。

很明显,我在上面的电话中犯了一个错误,不确定是什么

有很多事情需要考虑。

Zeroth,有用于InterProcess Communication的perlpc文档。错误变量$!的值是多少?

首先,使用$^X,这是您正在执行的perl的路径。由于子流程继承了您的环境,因此您希望使用相同的perl,这样它就不会将自己与PERL5LIB等混淆

system("$^X /var/www/cgi-bin/importOrig.pl filename=$filename")

其次,CGI程序倾向于期望设置特定的环境变量,例如REQUEST_METHOD。将它们称为普通的命令行程序通常会忽略这些内容。试着从命令行运行该程序,看看它是如何抱怨的。检查它是否得到了它想要的环境。您还可以检查程序的权限,看看是否允许您(或运行调用程序的任何用户(读取它(或其目录等(。你说没有故障,所以也许这不是你的特殊问题。但是,这两种环境在所有方面都匹配吗?

第三,考虑使第二个程序成为模数。您可以从命令行将其作为脚本正常运行,但也可以将其作为Perl库加载并直接使用其功能。这就排除了IPC的所有内容。您甚至可以fork,以便这些东西同时运行。

相关内容

最新更新