2015-01-09 8 views
5

Mam prostą aplikację konsolową korzystającą z komponentu konsoli Symfony.Wywołaj polecenie konsoli Symfony w innym poleceniu i usuń dane wyjściowe.

Mam dwie komendy (np. cmdOne i cmdTwo), które można łatwo wywołać niezależnie.

$ myApp.php cmdOne 
$ myApp.php cmdTwo 

Oba polecenia mają znaczną ilość mocy, którą można łatwo wyciszyć wydając opcję -q.

Teraz chciałbym cmdOne zadzwonić pod numer cmdTwo, ale chciałbym, aby cmdTwo było cicho. Nie próbuję robić nic szalonego, ale walczę, aby nigdzie nie dojść, mimo przeczytania dokumentów.

Oto mój przykładowy kod do tej pory (ten fragment będzie zawarty w cmdOne->execute()):

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

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

$returnCode = $command->run($input, $output); 

To działa dobrze, jak w wykonaniu polecenia kod, ale nie ma wyjścia na konsoli (generowane przez cmdTwo), który Nie chciałbym tego pokazywać.

Czy określenie opcji -q jest niemożliwe, ponieważ jest "zarezerwowane" (tzn. Nie zostało utworzone przez programistę), czy też brakuje mi czegoś oczywistego?

Odpowiedz

6

Zamiast przekazując samą $output instancji (ten, który wysyła sygnał do bieżącego konsoli) Utwórz instancję NullOutput

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

To w zasadzie jest Blackhole - akceptuje wyjście i cicho spada go.

+1

Pokonaj mnie, +1! – bishop

+0

@cerebriform: zajęło to 2 minuty więcej niż to możliwe ze względu na spowolnienie czasu uruchamiania i ponowne indeksowanie projektu (aby dowiedzieć się dokładnie o nazwie klasy) ;-P – zerkms

+0

Awesome! To działa na nagrodę, dziękuję (i inni); teraz tutaj jest krzywa krzywej: Jeśli 'cmdTwo' zawiedzie, czy istnieje rozsądny sposób, aby złapać wyjście? W tej chwili, jeśli uruchomisz bezpośrednio to po prostu błędy bezpośrednio na konsolę - czy powinienem zwrócić kod wyjścia dla pewnych błędów, a następnie obsługiwać je w 'cmdOne'? A może to zupełnie inne pytanie SO ... – HelloPablo