有什麼方法可以在CakePHP中捕獲shell的輸出?如何從CakePHP Shell捕獲輸出
我寫了一些shell來爲CakePHP 2.x應用程序生成報告。我能夠在命令行上運行shell並查看輸出,但是,現在我想通過電子郵件發送這些shell的結果。
我想過使用另一個shell作爲包裝,然後使用$this->dispatchShell('shellname')
來捕獲它的輸出,但似乎dispatchShell
只是運行shell並轉儲它的輸出到CLI。
有什麼方法可以在CakePHP中捕獲shell的輸出?如何從CakePHP Shell捕獲輸出
我寫了一些shell來爲CakePHP 2.x應用程序生成報告。我能夠在命令行上運行shell並查看輸出,但是,現在我想通過電子郵件發送這些shell的結果。
我想過使用另一個shell作爲包裝,然後使用$this->dispatchShell('shellname')
來捕獲它的輸出,但似乎dispatchShell
只是運行shell並轉儲它的輸出到CLI。
要將Shell輸出到文件,請在Shell的構造函數中聲明輸出流。下面是一個例子有標準輸出在你CakePHP的TMP
目錄日誌文件(通常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');
}
}
我在一個shell中使用CakePhp 1.3.6嘗試了這個,但是我在第7行的/path/sitemap.php中找不到Class'ConsoleOutput'。我在想ConsoleOutput是cakephp 2.0+? – 2013-04-03 14:33:05
這真是太好了,而且正是我想要的,但是如果可以將APPEND添加到文件而不是每次都覆蓋它,您知道嗎? – trevrobwhite 2017-03-07 21:14:07
只是再次測試,它需要什麼換來的是從報告外殼的主要方法,而不是$ this-> out內容。 – 2012-07-13 01:31:45