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

Hel*_*blo 5 php console-application symfony

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

我有两个命令(比如说,cmdOnecmdTwo)可以很容易地独立调用.

$ myApp.php cmdOne
$ myApp.php cmdTwo
Run Code Online (Sandbox Code Playgroud)

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

现在,我想cmdOne打电话,cmdTwo但我想cmdTwo保持安静.我不是想做任何疯狂的事情,但是尽管阅读了文档,但我仍然在努力去任何地方.

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

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

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

$returnCode = $command->run($input, $output);
Run Code Online (Sandbox Code Playgroud)

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

是否指定该-q选项是不可能的,因为它是"保留"(即不是由dev创建的),或者我错过了一些明显的东西?

zer*_*kms 6

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

$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);
Run Code Online (Sandbox Code Playgroud)

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