3

有没有办法在 CakePHP 中捕获 shell 的输出?

我已经编写了一些为 CakePHP 2.x 应用程序生成报告的 shell。我可以在命令行上运行 shell 并查看输出,但是,现在我想通过电子邮件发送这些 shell 的结果。

我考虑过使用另一个 shell 作为包装器,然后使用$this->dispatchShell('shellname')它来捕获它的输出,但它似乎dispatchShell只是运行 shell 并将它的输出转储到 CLI。

4

1 回答 1

2

要将 Shell 输出到文件,请在 Shell 的构造函数中声明一个输出流。下面是一个示例,让 stdout 成为 CakePHPTMP目录(通常app/tmp/)上名为 的文件中的日志文件shell.out

<?php
class FooShell extends AppShell {

    public function __construct($stdout = null, $stderr = null, $stdin = null) {
        // This will cause all Shell outputs, eg. from $this->out(), to be written to
        // TMP.'shell.out'
        $stdout = new ConsoleOutput('file://'.TMP.'shell.out');

        // You can do the same for stderr too if you wish
        // $stderr = new ConsoleOutput('file://'.TMP.'shell.err');

        parent::__construct($stdout, $stderr, $stdin);
    }

    public function main() {
        // The following output will not be printed on your console
        // but be written to TMP.'shell.out'
        $this->out('Hello world');
    }
}
于 2012-07-23T03:44:15.633 回答