我有一个系统调用,它以某种方式导致脚本错误标头中的标头格式错误

问题描述

我有一个 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 库,但我发现这种方法在大多数情况下都有些矫枉过正。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...