1

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

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

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

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

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

有任何想法吗?

4

4 回答 4

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 回显文件。

于 2010-04-21T04:46:24.690 回答
0

PHP没有反引号吗?

$output = `$command 2> /tmp/command.err`;
if (looks_like_command_failed($output)) {
    $error_message = file_get_contents('/tmp/command.err');
}
于 2010-04-21T05:36:35.817 回答
0

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

于 2010-04-21T05:52:15.117 回答
0

Perl 脚本随着它们的消息进入 stderr 而死,因此您需要捕获 stderr 以及 stdout 以查看发生了什么。

于 2010-04-21T16:03:38.947 回答