Thread Ausgabe eines Systemprogramms erfassen (16 answers)
Opened by errorsmith at 2012-12-28 11:15

Linuxer
 2012-12-30 15:56
#164521 #164521
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
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!

View full thread Ausgabe eines Systemprogramms erfassen