我有一个使用Symfony控制台组件的简单控制台应用程序。
我有两个命令(例如cmdOne
和cmdTwo
),可以轻松地分别调用它们。
$ 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);
可以正常运行,就像执行code命令一样,但是控制台上有我不想显示的输出(由
cmdTwo
生成)。是否指定
-q
选项是不可能的,因为它是“保留的”(即不是由开发人员创建的),还是我遗漏了一些明显的东西? 最佳答案
无需传递相同的$output
实例(输出到当前控制台的那个实例),而是创建NullOutput
的实例
$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);
从根本上讲,这是一个黑洞-接受输出,然后静默删除它。