我有一个系统调用不知何故导致脚本错误 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 库,但我发现该方法在大多数情况下都有些矫枉过正。
我有一个 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 库,但我发现该方法在大多数情况下都有些矫枉过正。