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


Call Symfony console command within another command and suppress output

我有一个简单的控制台应用程序,使用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选项是不可能的,因为它是"保留的"(即不是由开发人员创建的),还是我错过了一些明显的东西?

与其传递相同的$output实例(输出到当前控制台的实例),不如创建一个NullOutput

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

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