命令输出定向到屏幕

时间:2011-07-17 14:28:00

标签: perl

新手Perl程序员在这里! 我正在使用system()函数来获取外部程序的返回代码(在本例中为php),但是,命令的输出仍然会打印到屏幕上。
我该如何阻止它这样做? 我的代码是:

use strict; use warnings;
print 'Return code:', system('php -l wrong.php'), "\n";

此代码会打印返回代码,但它也会打印执行的命令的输出。

任何帮助将不胜感激!

编辑:进一步的测试表明,只有使用php lint命令才会发生这种情况..将它与其他命令一起使用并不会打印任何内容......

2 个答案:

答案 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直接处理输出,这应该更便携。