我有一个系统调用不知何故导致脚本错误 header 格式错误 header

I have a system call that somehow is causing malformed header from script Bad header

我有一个 Perl CGI 程序。 myperlcgi.pl

在这个程序中我有以下内容:

my $retval = system('extprogram')

extprogram 中有打印语句。

extprogram 的输出包含在 myperlcgi.pl

我试过添加

> output.txt 2>&1 

系统调用但没有改变任何东西。

如何防止在 myperlcgi.pl.

中使用输出形式的 extprogram

惊讶于系统调用的标准输出被用于 myperlcgi.pl

system 命令不能让您完全控制捕获已执行命令的 STDOUT 和 STDERR。

使用反引号或 open 来执行命令。这将捕获命令执行的 STDOUT。如果该命令也输出到 STDERR,那么您可以附加 2>&1 以将 STDERR 重定向到 STDOUT,以便在反引号中捕获,如下所示:

my $output = `$command 2>&1`;

如果您确实需要执行命令的本机 return 状态,您可以使用 $?${^CHILD_ERROR_NATIVE} 获取该信息。有关详细信息,请参阅 perldoc perlvar

另一种选择是使用 IPC::Open3 Perl 库,但我发现该方法在大多数情况下都有些矫枉过正。