如何在php中执行perl脚本并捕获错误消息?

时间:2010-04-21 03:52:46

标签: php perl die

我正在尝试像这样执行Perl脚本:

/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2'

当Perl脚本失败时,它会使用'die'退出并打印出错误消息。手动执行时我可以看到该错误消息,但我无法通过PHP捕获它。

我尝试了以下但没有成功:

exec($command,$output);
echo system($command,$output);
passthru($command);

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

你可以尝试:

$command = "/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2' > /tmp/exec.out 2>&1"
exec($command)
echo file_get_contents('/tmp/exec.out');

'> /tmp/exec.out 2>& 1'将所有输出重定向到/tmp/exec.out,然后PHP回送文件。

答案 1 :(得分:0)

PHP没有反引号吗?

$output = `$command 2> /tmp/command.err`;
if (looks_like_command_failed($output)) {
    $error_message = file_get_contents('/tmp/command.err');
}

答案 2 :(得分:0)

system()函数文档中给出的第一个示例提到它可能适用于php未接收输出的情况。该示例与stdout分开接收stderr,而不使用临时文件。海报没有解释为什么这种方法在system()不成功时会成功。所以没有回答根本问题,但也许是一种解决方法。

答案 3 :(得分:0)

Perl脚本死了,他们的消息转到stderr,所以你需要捕获stderr以及stdout以查看发生了什么。