developer tip

명령 줄 출력 업데이트 (예 : 진행률)

copycodes 2020. 12. 10. 20:40
반응형

명령 줄 출력 업데이트 (예 : 진행률)


명령 줄의 간단한 PHP 스크립트로 진행률 표시기를 표시하고 싶습니다. 보는 대신

Progress: 0%
Progress: 1%
etc...

예를 들어 git clone이하는 것처럼 번호 만 변경하고 이전 번호를 바꾸고 싶습니다 Resolving deltas: 100% (8522/8522), done..

이것을 검색하는 동안 Perl에서 동일한 질문에 대한 답을 찾았습니다 . 이것은 완벽하지만 PHP에서는 찾을 수 없습니다. 가능합니까? 그렇지 않은 경우 C에 의지합니다.

감사

업데이트 : C ++ 버전에 관심이있는 사람 은 여기에 있습니다 .


이것은 사용하여 수행 할 수 있습니다 ANSI는 시퀀스를 탈출 - 여기에서 볼 목록.

PHP에서는 해당 페이지에 "\033"표시 될 때 사용 ESC합니다.


귀하의 경우 다음과 같이 사용할 수 있습니다.

echo "Progress :      ";  // 5 characters of padding at the end
for ($i=0 ; $i<=100 ; $i++) {
    echo "\033[5D";      // Move 5 characters backward
    echo str_pad($i, 3, ' ', STR_PAD_LEFT) . " %";    // Output is always 5 characters long
    sleep(1);           // wait for a while, so we see the animation
}


나는 항상 같은 문자 수만큼 뒤로 이동하기 위해 항상 5 개의 추가 문자를 가지고 항상 동일한 양의 데이터를 표시하도록 약간 단순화했습니다.

그러나 물론 필요하다면 훨씬 더 복잡한 작업을 할 수 있어야합니다 ;-)

그리고 다른 흥미로운 이스케이프 시퀀스가 ​​많이 있습니다. 예를 들어 색상은 출력을 상당히 향상시킬 수 있습니다 ;-)


오래된 스레드를 통한 레코드 : 멋진 ANSI 이스케이프 시퀀스를 사용하여 커서를 뒤로 이동하는 대신 다음 줄의 시작 "\ n"대신 "\ r"을 사용하여 줄의 시작으로 다시 이동합니다. . 에코 뒤에 공백을 몇 개 추가하여 이전에 있던 모든 것을 덮어 씁니다. 예 :

for ($i=0 ; $i<=100 ; $i++) {
  echo "Progress: $i %   \r";
  sleep(1);
}

참고 URL : https://stackoverflow.com/questions/5265288/update-command-line-output-ie-for-progress

반응형