Вызовите консольную команду Symfony в другой команде и отключите вывод

У меня есть простое консольное приложение, использующее компонент консоли 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 опция невозможна, потому что она «зарезервирована» (т.е. не создана разработчиком), или я упускаю что-то очевидное?

5

Решение

Вместо того чтобы проходить то же самое $output экземпляр (тот, который выводит на вашу текущую консоль) создать экземпляр NullOutput

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

Это в основном черная дыра — она ​​принимает вывод и молча отбрасывает его.

6

Другие решения

Других решений пока нет …