2012-07-13 82 views
2

有什麼方法可以在CakePHP中捕獲shell的輸出?如何從CakePHP Shell捕獲輸出

我寫了一些shell來爲CakePHP 2.x應用程序生成報告。我能夠在命令行上運行shell並查看輸出,但是,現在我想通過電子郵件發送這些shell的結果。

我想過使用另一個shell作爲包裝,然後使用$this->dispatchShell('shellname')來捕獲它的輸出,但似乎dispatchShell只是運行shell並轉儲它的輸出到CLI。

+0

只是再次測試,它需要什麼換來的是從報告外殼的主要方法,而不是$ this-> out內容。 – 2012-07-13 01:31:45

回答

2

要將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'); 
    } 
} 
+0

我在一個shell中使用CakePhp 1.3.6嘗試了這個,但是我在第7行的/path/sitemap.php中找不到Class'ConsoleOutput'。我在想ConsoleOutput是cakephp 2.0+? – 2013-04-03 14:33:05

+0

這真是太好了,而且正是我想要的,但是如果可以將APPEND添加到文件而不是每次都覆蓋它,您知道嗎? – trevrobwhite 2017-03-07 21:14:07