2008-11-10 11 views
5

Ich habe ein kleines Perl-Skript (On Windows), das einige Dateien für mich als Hilfe für mein Tagesgeschäft überprüft. Im Moment druckt es so etwas wie aus ...Wie kann ich eine Fortschrittsanzeige in einer Perl-Befehlszeilenanwendung aktualisieren?

0% 
25% 
50% 
75% 
Complete 

Aber ich kann mich erinnern, Skripte Ich habe in der Vergangenheit verwendet, die nicht Fortschritt auf einer Zeile-für-Zeile-Basis gedruckt wurden, die aber die Ausgabe aktualisiert auf dem Display, vermutlich durch Bewegen des Cursors zurück und Überdrucken, was da war.

Wer weiß, welche Magie benötigt wird? Portabilität ist für mich nicht wichtig, das Skript ist ziemlich wegwerfbar.

Antwort

6

Zusätzlich zu den anderen Antworten wird \ r an den Anfang der aktuellen Zeile zurück

2

Sie sollten in der Lage sein, ein Rückschrittzeichen '\ b' zu drucken, um den Cursor zurück zu bewegen, damit Sie überschreiben können, was Sie zuvor gedruckt haben.

0

Ich weiß nicht, ob das in Perl funktioniert, aber in C/C++ können Sie

\b
für eine Rücktaste verwenden. Mit mehreren davon können Sie den Cursor bewegen, um alte Werte zu überschreiben.

8

Sie curses verwenden könnten und einen schönen Fortschrittsbalken machen.

EDIT: Oder etwas tun, wie folgt aus:

print "#####         [ 10%]\r"; 
# Do something 
print "##########       [ 20%]\r"; 
# Do something else 
print "###############      [ 30%]\r"; 
# Do some more 
# ... 
# ... 
# ... 
print "##################################### [100%]\n"; 
print "Done.\n"; 
+0

Ich denke, unter Windows müssen Sie 'binmode (STDOUT)' aufrufen, bevor '\ r' so funktioniert, wie Sie möchten. –

6

Wenn Sie jemals etwas in Perl tun müssen, ist es sehr wahrscheinlich, dass jemand es getan hat und es zu CPAN hochgeladen. Sehen Sie sich einige der Module mit "progress" in their name an.

+0

Wie Time :: Progress, die auf Windows funktioniert –

6

Das könnte Sie interessieren: Smart Comments. Dies wäre wahrscheinlich einfacher als die Programmierung Ihrer eigenen Fortschrittsbalken.

+0

Danke zoul, dass ein sehr smart ;-) Modul, das Sie hier empfehlen. –

Verwandte Themen