有没有办法在 CakePHP 中捕获 shell 的输出?
我已经编写了一些为 CakePHP 2.x 应用程序生成报告的 shell。我可以在命令行上运行 shell 并查看输出,但是,现在我想通过电子邮件发送这些 shell 的结果。
我考虑过使用另一个 shell 作为包装器,然后使用$this->dispatchShell('shellname')
它来捕获它的输出,但它似乎dispatchShell
只是运行 shell 并将它的输出转储到 CLI。
有没有办法在 CakePHP 中捕获 shell 的输出?
我已经编写了一些为 CakePHP 2.x 应用程序生成报告的 shell。我可以在命令行上运行 shell 并查看输出,但是,现在我想通过电子邮件发送这些 shell 的结果。
我考虑过使用另一个 shell 作为包装器,然后使用$this->dispatchShell('shellname')
它来捕获它的输出,但它似乎dispatchShell
只是运行 shell 并将它的输出转储到 CLI。
要将 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');
}
}