2016-11-27 4 views
2

Donc, je cours un Symfony Process pour certaines commandes, et j'ai remarqué que lorsque j'écris ceux-ci à OutputInterface de Symfony il ne montre pas les couleurs ou les barres de progression. Je pense que les commandes (npm, artisan, ls, etc) utilisent terminal control codes, et l'une de ces classes mange les caractères ASCII non standard.Symfony Process Eats Codes de contrôle terminal

EDIT: J'ai fait quelques recherches et je crois que Symfony utilise sa classe StreamOutput par défaut. Il semble être capable de produire en couleur, et j'ai essayé de le dire à OUTPUT_RAW. Pas de haricots là-bas. Peut-être le problème est ailleurs ...

Existe-t-il un moyen intégré de dire à ces classes de ne pas le faire? Comment puis-je récupérer ma jolie sortie?

Répondre

1

Couleurs disponibles depends sur le programme que vous appelez. Vous pouvez essayer de régler le TTY/pty:

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $process = new Process('ls -l --color="always"'); 
    $process->setTty(true); // or $process->setPty(true); 
    $process->run(); 
    $output->write($process->getOutput()); 
} 

Voir les documents connexes issue.

Je ne pense pas qu'une sortie de commande supprime les codes d'échappement. L'exemple suivant fonctionne bien (pour moi):

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $output->write(shell_exec('ls -l --color="always"')); // ok, output is colored 
} 

Espérons que cela aide.

+0

Merci! Ils devraient vraiment noter quelle est l'implication de 'setTty'; noobs comme moi pourrait ne pas se rendre compte que ATS signifie un «terminal télétype» sans beaucoup creuser dans le sujet. –