Schrift
[thread]8189[/thread]

time abfangen

Leser: 1


<< >> 8 Einträge, 1 Seite
tribbiani
 2006-07-21 17:55
#68308 #68308
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Hi,

ich hab folgendes Problem:
Bei der Ausführung externe Kommandos möchte ich mittels "time" auch die Ausführungszeit abfangen(neben stdout und stderr). Momentan landet aber die time-Ausgabe in dem stderr-Array, wie kann ich's besser machen(am liebsten in einem separaten Array)?

Code: (dl )
1
2
3
4
5
6
7
8
9
open (CMD, "(time $commandline | sed 's/^/STDOUT:/') 2>&1 |");
while (<CMD>) {
if (s/^STDOUT://) {
push @stdout, $_;
}
else {
push @stderr, $_;
}
}


Grüsse,
tribbs
Linuxer
 2006-07-21 22:09
#68309 #68309
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hi,
die Zeitangaben sind doch eigentlich die letzten 4 Zeilen auf STDERR. Entferne sie aus @stderr und packe sie in @time.

Doku: perldoc -f splice

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

use vars qw/@stdout @stderr $commandline @time /;
$commandline = 'perl sapr.pl';

open (CMD, "(time $commandline | sed 's/^/STDOUT:/') 2>&1 |");
while (<CMD>) {
if (s/^STDOUT://) {
push @stdout, $_;
}
else {
push @stderr, $_;
}
}
close CMD;

@time = splice(@stderr, -4, 4);

print "@time", $/;
\n\n

<!--EDIT|Linuxer|1153505408-->
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!
tribbiani
 2006-07-25 15:35
#68310 #68310
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
[quote=Linuxer,21.07.2006, 20:09]Hi,
die Zeitangaben sind doch eigentlich die letzten 4 Zeilen auf STDERR. Entferne sie aus @stderr und packe sie in @time.

Doku: perldoc -f splice

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

use vars qw/@stdout @stderr $commandline @time /;
$commandline = 'perl sapr.pl';

open (CMD, "(time $commandline | sed 's/^/STDOUT:/') 2>&1 |");
while (<CMD>) {
if (s/^STDOUT://) {
push @stdout, $_;
}
else {
push @stderr, $_;
}
}
close CMD;

@time = splice(@stderr, -4, 4);

print "@time", $/;
[/quote]
Hi,
ich will jetzt nicht übertreiben, aber die Idee ist einfach genial :)
Vielen Dank !

Grüsse,
tribbs
tribbiani
 2006-07-27 17:12
#68311 #68311
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Hi nochmals,

weiß jemand wie man an dem Return Wert eines Kommandos kommt, falls man es mit open in einem Pipe ausführt?
nepos
 2006-07-27 17:42
#68312 #68312
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, in $? eventuell?
tribbiani
 2006-07-27 18:14
#68313 #68313
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
wenn ich Kommandos mit open ausführe ist $? bei mir immer 0 ...
Linuxer
 2006-07-28 16:32
#68314 #68314
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hi,

wenn die Kommandos sauber beendet wurden, ist $? == 0 OK.

Vielleicht hilft Dir auch diese Beitragsfolge im Perlboard weiter...

So pauschal kann man Dir nicht weiterhelfen, solange Du keinen konkreten Code lieferst, bei dem es nicht so läuft, wie Du es erwartest.
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!
nepos
 2006-07-28 20:24
#68315 #68315
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, wenn man ein Programm mit open + Pipe oeffnet, dann sollte nach dessen Ende in $? der Returncode stehen. Steht auch so in der Doku und in Linuxer's Beispiel.
<< >> 8 Einträge, 1 Seite



View all threads created 2006-07-21 17:55.