问题描述
我有一个 Perl CGI 程序。 myperlcgi.pl
在这个程序中,我有以下内容:
my $retval = system('extprogram')
extprogram 中有一个打印语句。
extprogram 的输出包含在 myperlcgi.pl
我尝试添加
> output.txt 2>&1
到系统调用但没有改变任何东西。
如何防止在 myperlcgi.pl 中使用输出形式的 extprogram。
惊讶于 myperlcgi.pl
中使用了来自系统调用的 stdout解决方法
system
命令只是不能让您完全控制捕获执行命令的 STDOUT 和 STDERR。
改用反引号或 open
来执行命令。这将捕获命令执行的 STDOUT。如果命令也输出到 STDERR,那么您可以附加 2>&1
以将 STDERR 重定向到 STDOUT 以在反引号中捕获,如下所示:
my $output = `$command 2>&1`;
如果您确实需要执行命令的本机返回状态,您可以使用 $?
或 ${^CHILD_ERROR_NATIVE}
获取该信息。有关详细信息,请参阅 perldoc perlvar
。
另一种选择是使用 IPC::Open3
Perl 库,但我发现这种方法在大多数情况下都有些矫枉过正。