Thread Tk --> parallel zur Konsolenanwendung
(8 answers)
Opened by Lebowski at 2011-07-10 15:25
Ein Beispiel auf dem Terminal. Es wird ein Fortschrittsbalken erzeugt, der 0-100% geht. Dahinter wird als Spielerei die aktuelle Zeit angezeigt. Die Ausgabe wird wahrscheinlich nur in einem richtigen Terminal gut funktionieren. (Ich benutze "\r" um den Kursor wieder an den Anfang der Zeile zu setzen)
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #!/usr/bin/perl use strict; use warnings; use POSIX ":sys_wait_h"; use IO::Handle; my $timeout=5; my $output=''; my $bsize=63; # Interface: # zuerst die Gesammtzahl der Punkte die kommen werden als Zahl beendet mit "\n" # danach die Punkte. # Beispiel: my $cmd=q!perl -e ' $|=1; $x=111; print "$x\n"; for(0..$x) { print "."; select(undef,undef,undef,rand(1)); } '!; { my $pid=open(my $ph, '-|', $cmd) or die("ERROR START $cmd ($!)\n"); # die Anzhal der kommenden Punkte einlesen my $size=<$ph>; chomp($size); # handle ist nicht blockierend! $ph->blocking(0); my $cnt=0; # Ausgabe nicht puffern local $|=1; # wenn der prozes noch läuft # und noch nicht alle Punkte gesendet wurden. while(waitpid($pid, WNOHANG) == 0 && $cnt<$size) { # versuche zu lesen # ist nicht blockierend! my $dots=<$ph>; # etwas gelesen? if($dots) { # die Punkte zählen my $c=($dots=~y/././); # zähler erhöhen $cnt+=$c; } # prozent errechnen my $percent=(100/$size)*$cnt; # balken erzeugen my $line=substr(('='x(($bsize/$size)*$cnt))."|".(' 'x$bsize),0,$bsize); # aktuelle Zeit (hacky) my $time=substr(localtime(),11,8); # alles ausgeben printf "\r% 3u%% [%s] %s", $percent, $line, $time; # bischen warten select(undef,undef,undef,0.2) } close($ph); print "\n"; } Last edited: 2011-07-11 00:05:38 +0200 (CEST) |