如何在 Symfony 控制台中禁用命令的输出?
How to disable output for a command in Symfony Console?
我写了一个模块,实际上是 Magento 2 中的一个自定义命令。很明显,Magento 2 控制台应用程序自豪地由 Symfony 控制台 提供支持。我关心的是如何为指定命令禁用 $output
的输出?
例如:
$setupUpgradeCommand = $this->getApplication()->find('setup:upgrade');
$setupUpgradeArguments = array(
'command' => 'setup:upgrade',
'--quiet' => true,
);
$setupUpgradeInput = new ArrayInput($setupUpgradeArguments);
$start = microtime(true);
$output->writeln('<info>Start upgrading module schemas...</info>');
$setupUpgradeCommand->run($setupUpgradeInput, $output);
$output->writeln('...............................<info>OK</info>');
// My long logic-code start from here....
不幸的是,即使我将 --quiet
设置为 true,此命令的输出 setup:upgrade
仍然存在。
有什么想法吗?
您可以使用 BufferedOutput:
use Symfony\Component\Console\Output\BufferedOutput;
...
$setupUpgradeCommand->run($setupUpgradeInput, new BufferedOutput());
用法说明如下:
http://symfony.com/doc/current/cookbook/console/command_in_controller.html
另一种选择是使用记录器,并在您需要时将其显示在您的 CLI 上。您可以在这个(现在是旧的)新闻 post 中阅读更多相关信息:http://symfony.com/blog/new-in-symfony-2-4-show-logs-in-console
一个完整的示例,您甚至可以格式化从 post:
中获取的输出
services:
my_formatter:
class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter
arguments:
- "[%%datetime%%] %%start_tag%%%%message%%%%end_tag%% (%%level_name%%) %%context%% %%extra%%\n"
monolog:
handlers:
console:
type: console
verbosity_levels:
VERBOSITY_NORMAL: NOTICE
channels: my_channel
formatter: my_formatter
您可以在此处找到文档:http://symfony.com/doc/current/cookbook/logging/monolog.html
如评论中所回答..虽然与@toooni 的回答几乎完全相同。
您可以插入 NullOutput
而不是插入命令提供的实际输出对象。
use Symfony\Component\Console\Output\NullOutput;
$setupUpgradeCommand->run($setupUpgradeInput, new NullOutput());
我写了一个模块,实际上是 Magento 2 中的一个自定义命令。很明显,Magento 2 控制台应用程序自豪地由 Symfony 控制台 提供支持。我关心的是如何为指定命令禁用 $output
的输出?
例如:
$setupUpgradeCommand = $this->getApplication()->find('setup:upgrade');
$setupUpgradeArguments = array(
'command' => 'setup:upgrade',
'--quiet' => true,
);
$setupUpgradeInput = new ArrayInput($setupUpgradeArguments);
$start = microtime(true);
$output->writeln('<info>Start upgrading module schemas...</info>');
$setupUpgradeCommand->run($setupUpgradeInput, $output);
$output->writeln('...............................<info>OK</info>');
// My long logic-code start from here....
不幸的是,即使我将 --quiet
设置为 true,此命令的输出 setup:upgrade
仍然存在。
有什么想法吗?
您可以使用 BufferedOutput:
use Symfony\Component\Console\Output\BufferedOutput;
...
$setupUpgradeCommand->run($setupUpgradeInput, new BufferedOutput());
用法说明如下: http://symfony.com/doc/current/cookbook/console/command_in_controller.html
另一种选择是使用记录器,并在您需要时将其显示在您的 CLI 上。您可以在这个(现在是旧的)新闻 post 中阅读更多相关信息:http://symfony.com/blog/new-in-symfony-2-4-show-logs-in-console
一个完整的示例,您甚至可以格式化从 post:
中获取的输出services:
my_formatter:
class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter
arguments:
- "[%%datetime%%] %%start_tag%%%%message%%%%end_tag%% (%%level_name%%) %%context%% %%extra%%\n"
monolog:
handlers:
console:
type: console
verbosity_levels:
VERBOSITY_NORMAL: NOTICE
channels: my_channel
formatter: my_formatter
您可以在此处找到文档:http://symfony.com/doc/current/cookbook/logging/monolog.html
如评论中所回答..虽然与@toooni 的回答几乎完全相同。
您可以插入 NullOutput
而不是插入命令提供的实际输出对象。
use Symfony\Component\Console\Output\NullOutput;
$setupUpgradeCommand->run($setupUpgradeInput, new NullOutput());