![]() |
|< 1 2 >| | ![]() |
12 Einträge, 2 Seiten |
1 2
# Ausgabe landet in $output; Fehlerkanal wird auch auf STDOUT ausgegeben (2>&1) my $output = `/sbin/ifconfig -a 2>&1`;
1 2 3 4 5 6 7 8 9
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 my @output = qx(/sbin/ifconfig -a 2>&1); 7 foreach(@output) { 8 print $_; 9 }
1 2 3 4 5 6 7 8 9
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 my @output = qx(/sbin/ifconfig -a 2>&1); 7 foreach(@output) { 8 print $_; 9 }
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
use strict;
use warnings;
use IPC::Open3;
my @errors;
my $command = '/sbin/ifconfig -a';
my $pid = open3(\*CHLD_STDIN, \*CHLD_STDOUT, \*CHLD_STDERR, $command) or die "Fehler: $command kann nicht ausgefuehrt werden - $!";
# CHLD_IN wird geschlossen, da wir die Optionen schon mitgegeben haben.
# Nach dem close von CHLD_IN faengt ifconfig an zu arbeiten...
close CHLD_STDIN;
# es wird STDOUT des Prozesses ausgelesen und verarbeitet
while (<CHLD_STDOUT>) {
# irgendeine Verarbeitung
print;
}
close CHLD_STDOUT;
# Mit $/ wird der gesamte Inhalt von CHLD_STDERR auf einmal
# eingelesen. Das ganze in einem extra Block, damit $/ nicht
# global veraendert wird.
{
local $/;
@errors = <CHLD_STDERR>;
}
close CHLD_STDERR;
# Prozess wieder einsammeln.
waitpid($pid,0);
# Ausgabe des Status.
printf "Status: %i\n", ($? ? $? / 256 : $?);
if (@errors) {
print "Aufgetretene Fehler:\n";
print for @errors;
}
![]() |
|< 1 2 >| | ![]() |
12 Einträge, 2 Seiten |