2016-11-27 14 views
2

일부 명령의 경우 Symfony Process을 실행하고 있는데 Symfony의 OutputInterface에 쓰기를하면 색상이나 진행률 막대가 표시되지 않습니다. 명령 (npm, artisan, ls 등)은 terminal control codes을 사용하고 있으며 그 중 하나는 비표준 ASCII 문자를 사용한다고 생각합니다.Symfony 프로세스가 터미널 제어 코드를 먹습니다.

편집 : Symfony는 기본적으로 해당 StreamOutput 클래스를 사용합니다. 그것은 컬러로 출력 할 수있는 것으로 보입니다. 그리고 나는 그것을 OUTPUT_RAW에게 말하려고 시도했습니다. 콩은 거기에 없다. 아마도 문제는 어딘가에있을 것입니다 ...

이러한 클래스에 그렇게하지 않도록 지시하는 기본 제공 방법이 있습니까? 예쁜 출력을 다시 얻으려면 어떻게해야합니까?

답변

1

호출 할 프로그램의 색상은 depends입니다. 당신은 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()); 
} 

issue 관련 참조하십시오.

명령 출력이 이스케이프 코드를 제거하지 않는다고 생각합니다. 다음 예제는 잘 작동합니다 (나를 위해) :

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

희망이 있습니다.

+0

감사! 그들은'setTty'의 의미가 무엇인지를 알아야합니다. 나와 같은 멍청한 놈들은 TTY가 피사체를 파고 들지 않고 '텔레타이프 터미널'이라는 것을 깨닫지 못할 수도 있습니다. –