PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Standard Output Stream in Array legen (Perl)



Rebell
07-01-2003, 08:04
Hallo!

Ich hab ne interessante Frage, vielleicht könnt ihr sie beantworten. Mir ist aufgefallen dass dpkg -l die Liste der installierten Pakete angepasst an die jeweilige Konsolengröße, dh. Spalten anpasst. Je größer desto weiter sind die Spalten auseinander. Die Paketnamen werden dann also nicht abgeschnitten.

Da das aber aber nicht mit dpkg -l >textdatei funktioniert wollte ich wissen wie den Standard Ausgabe Stream von dpkg in ein Array umleiten kann. Trennzeichen sind " " (Leerzeichen).

blackm
11-01-2003, 01:49
Original geschrieben von Rebell
Mir ist aufgefallen dass dpkg -l die Liste der installierten Pakete angepasst an die jeweilige Konsolengröße, dh. Spalten anpasst. Je größer desto weiter sind die Spalten auseinander. Die Paketnamen werden dann also nicht abgeschnitten.Also das ist bei mir nicht so. Wenn ich dpkg -l aus der bash aufure, dann werden die Namen abgeschnitten. Wenn ich das xterm breiter mache, dann werden die nicht abgeschntten. Das gleiche wenn ich system("dpkg -l"); aus einem Perl Script aufrufe.

by, blackm

fork
11-01-2003, 14:01
Hat mich auch schon mal gewundert:

http://www.linuxforen.de/forums/showthread.php?s=&threadid=43207

Gruß
Tobias

the_brain
10-02-2003, 13:59
ich schätze das sind tabstops - benutz einfach ein skalar mit einer referenz auf ein array um die werte abzuspeichern.

wennde nur die installierten pakete willst, dann in etwa sowas
open (LIST, "|dpkg -l") || die "dpkg not installed\n";
@array = <LIST>;
close (LIST);
foreach (@array){
$_ =~ s/\n//g;
($status, $name, $version, $beschreibung) = split (/\t/,$_);
$status{$name} = $status; # wennde nur die ausgabe realisieren willst, das hier nicht
$version{$name} = $name; #
$beschreibung{$name} = $beschreibung; #
print "$status\t$name\t$version\t$beschreibung\n";
}


habe das jetzt nicht ausprobiert, aber sollte eigentlich gehen.