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 に答える