Soru Komut Satırı Çıktısını, yani İlerleme için Güncelleştir


Komut satırında basit bir PHP betiğinde bir ilerleme göstergesini göstermek istiyorum. Görmek yerine

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

Sadece değiştirilecek numarayı istiyorum ve önceki sayıyı değiştirin, örneğin git clone gibi Resolving deltas: 100% (8522/8522), done..

Bunu ararken ararken aynı soru Perl'de cevaplandı, bu mükemmel, ama bunu PHP'de bulamadım. Mümkün mü? Değilse, C'ye gideceğim.

Teşekkürler

Güncelleştirme: C ++ sürümüyle ilgilenen biri varsa, burada.


44
2018-03-10 20:07


Menşei


genellikle php, tarayıcıya herhangi bir şey gönderilmeden işini bitirdi, senaryo ne yapıyor?
@Dagon komut satırı kullanıyor - Pascal MARTIN
doh! teşekkürler, daha da kötü geliyor, o zaman yaptığım tek php komut satırı benim için değil, kullanıcı arayüz.
Evet, komut satırında. Sadece kişisel kullanım için basit komut dosyaları için: proje sürüm numarasını güncelleme, dosyaları bir yere transfer etme, vb. - Adam
gerçek erkeklerin güzel ilerleme çubuklarına ihtiyacı yoktur :-)


Cevaplar:


Bu kullanılarak yapılabilir ANSI Kaçış Dizileri - buraya bakın bir liste için.

PHP'de kullanacaksın "\033" belirtildiğinde ESC bu sayfada.


Senin durumunda, böyle bir şey kullanabilirsiniz:

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
}


Biraz daha basitleştirdim, her zaman fazladan fazla karaktere sahip olduğumu ve her zaman aynı miktarda veriyi görüntülediğimi, her zaman aynı sayıda karakterle geriye doğru hareket ettiğimi ...

Ancak, elbette, gerekirse, çok daha karmaşık yapabilmeniz gerekir ;-)

Ve diğer birçok ilginç kaçış dizileri vardır: renkler, örneğin, çıktınızı biraz arttırabilir ;-)


88
2018-03-10 20:19



Mükemmel görünüyor. Teşekkürler - Adam
Rica ederim :-) İyi eğlenceler! - Pascal MARTIN
PHP> 5.4.0 şimdi ESC yazmak için "\ e" var - Tobias Herkula
Güzel .... ama pencerelerde bile çalışmıyor \e - Baba
@Baba Windows için Ansicon'ı tepsiye alabilirsiniz. github.com/adoxa/ansicon - Jens A. Koch


Sadece eski bir iş parçacığı için kayıt için: Lanetli bir ANSI Escape dizilimi kullanmak yerine curser'ı geri almak için satırın başına "\ n" yerine bir sonraki satırın başına "\ r" kullanarak dönüyorum. Daha önce var olan herhangi bir şeyin üzerine yazmak için ekonuzun ardından birkaç boşluk ekleyin, ör. yani:

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

29
2017-11-13 09:31



Windows'da da bir çekicilik gibi çalışır! (Test edilen) - Alex
En fazla not ile çözümden çok daha kolay - OSX'de mükemmel çalışıyor. - Antonio


Ayrıca böyle bir şey yapabilirsiniz:

<?php

function showTextBasedProgress()
{
   static $progress = '-';

   echo chr(8) . $progress; // chr(8) = \b

   switch ($progress)
   {
      case '-':
      {
         $progress = '\\';
         break;
      }

      case '\\':
      {
         $progress = '|';
         break;
      }

      case '|':
      {
         $progress = '/';
         break;
      }

      case '/':
      {
         $progress = '-';
         break;
      }
   }
}

Örnek kullanım:

while(1)
{
   showTextBasedProgress();
   sleep(1);
}

-2
2018-04-17 12:02