programing

명령줄 출력 업데이트(즉, 진행

copyandpastes 2023. 7. 25. 23:15
반응형

명령줄 출력 업데이트(즉, 진행

명령줄에서 간단한 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-i-e-for-progress

반응형