Ausgabe eines Prozesses in Variable speichern

Ausgabe eines Prozesses in Variable speichern

am 23.06.2006 18:25:59 von Mark Neis

Hallo NG,

ich bin gerade dabei, ein Skript zu schreiben, das mir diverse Daten
von anderen Maschinen per rsh[0] holt, sie ein wenig umformt und eine
nette Zusammenfassung ausgibt.

Mein Ansatz ist bisher, "system" zu benutzen, um die Daten erst mal in
Dateien abzulegen, die ich dann später mit open ansprechen kann:
| system("rsh targethost args 1>/tmp/targethost.out");

Nun sind in dem Programm mehrere Stellen, wo die Ausgabe eines
rsh-Aufrufs dazu benutzt wird, eine Reihe weiterer rsh-Aufrufe zu
generieren. Mir deucht, die Daten immer zwischendurch in Dateien
abzulegen sei wenig elegant. Da ich allerdings relativ wenig Erfahrung
mit Perl habe, kenne ich die möglichen Alternativen nicht.
Ich dachte daran, die Ausgabe eines per system gestarteten Prozesses
direkt in eine Liste oder ein Skalar zu speichern. Geht das überhaupt
- und wenn ja: wie? Oder gibt's da noch andere Wege?

Kann mir vielleicht jemand einen Tip geben (oder ein Stichwort, nach
dem ich suchen kann)?


TIA,
Mark

--
Hach. Friedhofsgaertner. Ein Leben, wo alle Idioten schon unter der Erde
liegen, koennte soooo schoen sein.
[Vincent 'Gadget' Hoefler in dasr]

Re: Ausgabe eines Prozesses in Variable speichern

am 23.06.2006 19:27:57 von Ferry Bolhar

Mark Neis:

> Ich dachte daran, die Ausgabe eines per system gestarteten Prozesses
> direkt in eine Liste oder ein Skalar zu speichern. Geht das überhaupt
> - und wenn ja: wie? Oder gibt's da noch andere Wege?
>
> Kann mir vielleicht jemand einen Tip geben (oder ein Stichwort, nach
> dem ich suchen kann)?

Das Stichwort lautet 'Backtick Operator' oder 'qx'.

Du kannst zB. mit

@array = qx/ps -ef/;

die Ausgabe von 'ps -ef' zeilenweise in ein Array schreiben, dh.,
in jedem Element des Arrays steht fortlaufend eine Zeile der Ausgabe.
Erwartest du nur eine Zeile, kannst du die Ausgabe auch nur an einen
Skalar zuweisen.

Eine - IMHO weniger schöne - Schreibweise ist

@array = `ps -ef`;

(also die verkehrten Hochkommas - Backticks) in Perl 5.005
und älter, wo es 'qx' noch nicht gab.

Achtung: jede Zeile enthält auch das abschließende "\n" (Zeilen-
vorschub), das man daher ggf. vor der Weiterverarbeitung
weg-'chomp'-en muss.

HTH & schöne Grüße aus Wien,

Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: Ausgabe eines Prozesses in Variable speichern

am 26.06.2006 15:02:47 von Mark Neis

Ferry Bolhar schrieb:

>Mark Neis:
>
>> Ich dachte daran, die Ausgabe eines per system gestarteten Prozesses
>> direkt in eine Liste oder ein Skalar zu speichern. Geht das ?upt
>> - und wenn ja: wie?

>Das Stichwort lautet 'Backtick Operator' oder 'qx'.
....
>@array = qx/ps -ef/;
....
>@array = `ps -ef`;

Danke. Dass das wie in Shellscripts geht, hätte ich nicht gedacht.

Mark

--
Hach. Friedhofsgaertner. Ein Leben, wo alle Idioten schon unter der Erde
liegen, koennte soooo schoen sein.
[Vincent 'Gadget' Hoefler in dasr]

Re: Ausgabe eines Prozesses in Variable speichern

am 26.06.2006 16:09:04 von Daniel Fischer

Mark Neis!

> Danke. Dass das wie in Shellscripts geht, hätte ich nicht gedacht.

Das ist bei perl grundsätzlich so. Du kannst Dinge wie in Shellscripts
machen, Du kannst Dinge wie in C machen, Du kannst Dinge wie in awk
machen, Du kannst Dinge wie in INTERCAL machen (was dem eigentlichen perl
recht nah kommt), ...


SCNR
Daniel