Schrift
[thread]8638[/thread]

system Aufruf mit Perl in Array speichern

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
krusty
 2007-01-12 10:59
#73135 #73135
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

bin gerade dabei ein Script zu schreiben, welches unter Perl laufen muss. In dem Script mache ich einen Aufruf mittels system. Das Ergebnis des Aufrufs will ich in ein Array speichern. Nur leider habe ich bisher noch keinen Weg gefunden wie ich das anstellen kann.

Kann mir von euch einer weiterhelfen?
Gruß
bloonix
 2007-01-12 11:12
#73136 #73136
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=krusty,12.01.2007, 09:59]Hallo zusammen,

bin gerade dabei ein Script zu schreiben, welches unter Perl laufen muss. In dem Script mache ich einen Aufruf mittels system. Das Ergebnis des Aufrufs will ich in ein Array speichern. Nur leider habe ich bisher noch keinen Weg gefunden wie ich das anstellen kann.

Kann mir von euch einer weiterhelfen?
Gruß[/quote]
Hallo krusty,

um die Ausgabe eines Systemaufrufs abfangen zu können, benötigst
du qx'' oder Backticks.

Perldoc:perlop STRING\n\n

<!--EDIT|opi|1168615595-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
krusty
 2007-01-12 11:19
#73137 #73137
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hi, habe das mal getestet, leider ohne erfolg. Hier mal der code.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl -w

use strict;
use warnings;

my @Array_test = system('fgrep "(22.5.1983)" /test/old/* -l');

foreach my $x (@Array_test)
{
print "Debug: ".$x."\n";
}
\n\n

<!--EDIT|krusty|1168593990-->
bloonix
 2007-01-12 11:26
#73138 #73138
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo krusty,

du hast nicht das getestet, was ich dir gepostet habe. Du musst dir
schon die Mühe machen und den Link anklicken. =)

Gruss,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
krusty
 2007-01-12 11:33
#73139 #73139
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Sorry,

habe deinen Link schon gelesen, habe jetzt folgendes gemacht:

Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w

use strict;
use warnings;


my $test = qx'fgrep "(22.5.1983)" /test/old/* -l';

print "Debug: ".$test."\n";


Das funktioniert auch, aber wie bekomme ich die Ausgabe jetzt in ein Array, so das alle gefundenen Zeilen jeweils in einem Element des Arrays gespeichert werden. In meinem Beispiel werden zwei Einträge gefunden. Das stimmt soweit auch. Der erste wir mit dem Debug: ausgegeben, der zweite ohne. Kann ja eigentlich auch nicht anders gehen, da ich nirgendwo ein Array abfrage. Ist die Ausgabe aus dem Befehl vlt. direkt ein Array? Mal testen.


[edit:]

Habe es geschafft.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl -w

use strict;
use warnings;


my @test = qx'fgrep "(22.5.1983)" /test/old/* -l';

foreach my $x (@test)
{
chomp($x);
print "Debug: ".$x."\n";
}


Danke für die Hilfe\n\n

<!--EDIT|krusty|1168594656-->
bloonix
 2007-01-12 11:39
#73140 #73140
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (dl )
1
2
my @test = qx'fgrep "(22.5.1983)" /test/old/* -l';
print "Debug: ",@test,"\n";


Wenn du den Schalter -w benutzt, dann brauchst du kein "use warnings;".\n\n

<!--EDIT|opi|1168594894-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-01-12 11:43
#73141 #73141
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=krusty,12.01.2007, 10:33]Danke für die Hilfe[/quote]
Bitte. Vergiss aber nicht, nach dem externen Call $? abzufragen.
Und was natürlich noch schicker wäre, wäre das Ganze in perlisch
oder zumindest das Auslesen des Ergebnisses über eine Pipe. =)\n\n

<!--EDIT|opi|1168595199-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
krusty
 2007-01-12 12:45
#73142 #73142
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Also in $? steht nur ne 0.

Warum ich das nicht direkt mit perl gemacht habe, ist ganz einfach. fgrep ist einfach schneller.

Gruß
bloonix
 2007-01-12 13:27
#73143 #73143
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=krusty,12.01.2007, 11:45]Also in $? steht nur ne 0.[/quote]
Ja und wenn in $? keine Null steht, dann ist der externe Call aus irgend-
einem Grund fehlgeschlagen. Sowas sollte man abfangen. Mit $? zu
arbeiten, wenn man externe Calls ausführt, ist einfach sauberer.

[quote=krusty,12.01.2007, 11:45]Warum ich das nicht direkt mit perl gemacht habe, ist ganz einfach. fgrep ist einfach schneller.[/quote]
Verständlich. Solange du fgrep auch nicht in einer Schleife ausführst,
ist das voll ok. Aber das Problem ist, dass es vielleicht auf irgendeinem
OS kein fgrep gibt. Hinzu kommt, das der Output sehr groß sein kann und
da wäre eine Filterung mit while() auch nicht schlecht.

Der Vorteil an einer perlischen Lösung in einer Sub ist, dass du diese
immer wieder verwenden kannst, egal auf welchem System, anstonsten
müsstest du dieses Codestück immer wieder neu schreiben.\n\n

<!--EDIT|opi|1168601318-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
krusty
 2007-01-12 13:42
#73144 #73144
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Noch ne recht bescheidene Frage. Wie prüfst du die Variable ($?)?

Einfach nur ne einfache if Anweisung?
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-01-12 10:59.