Thread Ausgabe eines Systemprogramms erfassen
(16 answers)
Opened by errorsmith at 2012-12-28 11:15
Hi, hier ein eher simpler Ansatz mit Schwächen ;-), die aber IMHO vernachlässigbar sind, wenn man sich ihrer bewusst ist.
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 #! /usr/bin/env perl use strict; use warnings; # Dieser Ansatz hat den Nachteil, dass, wenn lange Zeit keine Zeile # ausgegeben wird, die while-Schleife "haengt" und auf die naechste # zu lesende Zeile wartet; da ist egal, wieviel Zeit verstrichen ist. my $command = '/bin/bash /tmp/testscript'; # Zeitstempel, wann das Skript gestartet wurde my $starttime = $^T; # Ausgabe soll alle $delta Sekunden erfolgen my $delta = 6; open( my $pipe, '-|', $command ) or die "Could not open pipe from '$command': $!\n"; # Zum Start geben wir die erste gelesene Zeile aus print scalar <$pipe>; # Zeilenweise lesen while ( my $line = <$pipe> ) { # pro Zeile aktuellen Zeitstempel holen my $now = time(); # wenn mehr als $delta vergangen ist, Zeile ausgeben if ( $now - $starttime >= $delta ) { printf "%s", $line; # Startzeit anpassen, damit die Differenz für den # naechsten Check wieder passt $starttime += $delta; } } __END__ meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |