在另一个命令中调用 Symfony 控制台命令并抑制输出
Call Symfony console command within another command and suppress output
我有一个使用 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);
这运行良好,因为在代码命令中执行,但控制台上有我不想显示的输出(由 cmdTwo
生成)。
是否无法指定 -q
选项,因为它是 "reserved"(即不是由开发人员创建),还是我遗漏了一些明显的东西?
创建 NullOutput
的实例,而不是传递相同的 $output
实例(输出到当前控制台的实例)
$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);
它基本上是一个黑洞 - 它接受输出并静静地丢弃它。
我有一个使用 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);
这运行良好,因为在代码命令中执行,但控制台上有我不想显示的输出(由 cmdTwo
生成)。
是否无法指定 -q
选项,因为它是 "reserved"(即不是由开发人员创建),还是我遗漏了一些明显的东西?
创建 NullOutput
$output
实例(输出到当前控制台的实例)
$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);
它基本上是一个黑洞 - 它接受输出并静静地丢弃它。