新手Perl程序员在这里!
我正在使用system()函数来获取外部程序的返回代码(在本例中为php),但是,命令的输出仍然会打印到屏幕上。
我该如何阻止它这样做?
我的代码是:
use strict; use warnings;
print 'Return code:', system('php -l wrong.php'), "\n";
此代码会打印返回代码,但它也会打印执行的命令的输出。
任何帮助将不胜感激!
编辑:进一步的测试表明,只有使用php lint命令才会发生这种情况..将它与其他命令一起使用并不会打印任何内容......答案 0 :(得分:4)
你想要的是IPC::Open3:
use IPC::Open3;
use Symbol qw(gensym);
my $err = gensym; #work around IPC::Open3's interface
my $pid = open3 my $wtr, my $rdr, $err,
'some cmd', 'arg1', 'arg2', ...;
将stdin分隔为$wtr
,将stdout分隔为$rdr
,将stderr分隔为$err
这也使您可以最大限度地控制与流程的通信
答案 1 :(得分:2)
如果您使用的是类UNIX操作系统,则应该可以在命令中重定向输出:
尝试:
system('php -l wrong.php >> /dev/null')
摆脱发送给stdout的内容。
你也可以open the command with a pipe直接处理输出,这应该更便携。