在另一个命令中调用Symfony控制台命令并禁止输出

时间:2015-01-09 01:00:48

标签: php symfony console-application

我有一个使用Symfony控制台组件的简单控制台应用程序。

我有两个命令(比如cmdOnecmdTwo),可以轻松地单独调用。

$ myApp.php cmdOne
$ myApp.php cmdTwo

这两个命令都有相当多的输出,我可以通过发出-q选项轻松地将其静音。

现在,我希望cmdOne致电cmdTwo,但我希望cmdTwo保持安静。我并没有尝试做任何疯狂的事情,但尽管阅读了这些文档,但我仍在努力争取到任何地方。

到目前为止,这是我的示例代码(此代码段将包含在cmdOne->execute()中):

$command = $this->getApplication()->find('cmdTwo');

$input = new ArrayInput(array(
    'command' => 'cmdTwo',
    '-q' => true
));

$returnCode = $command->run($input, $output);

这样运行正常,就像代码命令执行一样,但是控制台上的输出(由cmdTwo生成)我想不显示。

指定-q选项是不可能的,因为它"保留" (即不是由开发人员创建的),还是我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:6)

不是传递相同的$output实例(输出到当前控制台的实例),而是创建NullOutput的实例

$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);

它基本上是一个黑洞 - 它接受输出并静静地丢弃它。