Auswählen bestimmter Spalten aus der Ausgabe von df -h in Python

8

Ich versuche, ein einfaches Skript zu erstellen, das bestimmte Spalten aus dem Befehl unix df - h auswählt. Ich kann awk dazu verwenden, aber wie können wir das in Python machen?

Hier ist df -h output:

%Vor%

Ich möchte etwas wie:

Spalte 1:

%Vor%

Spalte 2:

%Vor%     
user1610085 19.08.2012, 14:24
quelle

7 Antworten

10

Sie können op.popen verwenden, um den Befehl auszuführen und seine Ausgabe abzurufen, dann < a href="http://docs.python.org/library/stdtypes.html#str.splitlines"> splitlines und split um die Zeilen und Felder zu teilen. Führen Sie df -Ph statt df -h aus, damit die Zeilen nicht geteilt werden, wenn auch eine Spalte vorhanden ist lang.

%Vor%

Das Ergebnis ist eine Liste von Zeilen. Um die erste Spalte zu extrahieren, können Sie [line[0] for line in df_output_lines] verwenden (beachten Sie, dass Spalten von 0 nummeriert sind) und so weiter. Sie können df_output_lines[1:] anstelle von df_output_lines verwenden, um die Titelzeile zu entfernen.

Wenn Sie die Ausgabe von df -h bereits irgendwo in einer Datei gespeichert haben, müssen Sie zuerst die Zeilen verbinden.

%Vor%

Beachten Sie, dass davon ausgegangen wird, dass weder der Name des Dateisystems noch der Einhängepunkt Leerzeichen enthält. Wenn dies der Fall ist (was bei einigen Unix-Varianten mit einigen Setups möglich ist), ist es praktisch unmöglich, die Ausgabe von df , sogar df -P zu analysieren. Sie können os.statvfs verwenden, um Informationen zu einem bestimmten Dateisystem zu erhalten (dies ist die Python-Schnittstelle zu die C-Funktion , die df intern für jedes Dateisystem aufruft, aber es gibt keine übertragbare Möglichkeit Aufzählung der Dateisysteme.

    
Gilles 19.08.2012, 15:06
quelle
2

Hier ist das vollständige Beispiel:

%Vor%

Es setzt voraus, dass Mount-Punkte keine Leerzeichen enthalten.

Hier ist die vollständigere (und komplizierte Lösung), die die Anzahl der Spalten nicht festkernt:

%Vor%     
Zaar Hai 19.08.2012 15:11
quelle
2

Keine Antwort auf die Frage, aber ich habe versucht, das Problem zu lösen. :)

%Vor%     
eminor 19.08.2012 18:28
quelle
1

Verwenden Sie os.popen nicht, da es veraltet ist (http://docs.python.org/library/os#os.popen).

Ich habe die Ausgabe von df -h in eine Datei geschrieben: test.txt und lese gerade aus dieser Datei. Aber Sie können auch mit Subprozess lesen. Unter der Annahme, dass Sie in der Lage sind, jede Zeile der Ausgabe von df -h zu lesen, würde der folgende Code helfen: -

%Vor%

eachColumn zeigt die gesamte gewünschte Spalte als Liste an. Sie können einfach darüber iterieren. Wenn Sie brauchen, kann ich den Code zum Lesen der Ausgabe von df -h geben, so dass Sie die Abhängigkeit von test.txt entfernen können, aber wenn Sie zur Dokumentation des Unterprozesses gehen, können Sie leicht herausfinden, wie Sie es tun können.

    
GodMan 19.08.2012 15:13
quelle
1

Ich hatte einen Mount-Punkt mit einem Leerzeichen darin. Dies warf die meisten Beispiele ab. Dies entlehnt viel von @Zarrhais Beispiel , aber fügt das Ergebnis in dict

ein %Vor%     
the7erm 11.04.2015 01:32
quelle
0

Das funktioniert:

%Vor%     
dawg 19.08.2012 15:18
quelle
0

Ich fand dies als einen einfachen Weg, es zu tun ...

%Vor%     
user3868300 11.08.2015 12:33
quelle

Tags und Links