Seite 1 von 1

512 - ''grosese aktulles Verzeichniss" geht nicht?

Verfasst: Mittwoch 25. Oktober 2006, 15:37
von bennym
Hallo
Wieder mal eines der langweiligen newbie probleme....

Trotzdem komm ich ohne eure hilfe nicht weiter:

Code: Alles auswählen

import os
512 - int(os.system("du -s|awk {'print $1'}"))

Warum kommt nicht das Ergebniss von 512 - ''grosese aktulles Verzeichniss" raus?


mfg benny

Verfasst: Mittwoch 25. Oktober 2006, 16:30
von CM
Hoi,

tja, was kommt denn bei Dir heraus? Ggf. hilt eine Fehlermeldung und das Anzeigen eines Ergebnisses, wenn es darum geht Fehler zu finden.

Dein Befehl in os.system sollte schon die Zusammenfassung für das aktuelle Verzeichnis liefern. Aber bist Du Dir sicher, daß Du genau das willst? Was ist denn Dein eigentliches Ziel? Vielleicht können wir Dir einen Tipp geben, wie man das in Python machen kann ;-).

Gruß,
Christian

Verfasst: Mittwoch 25. Oktober 2006, 16:55
von bennym
Hallo CM!
Danke fuer dein Bemuehen!

Mein Ziel ist, 512 mb (die groesse meines mp3players) - Die Groesse des Verzeichnisses.
Wenn das Ergebniss dann negativ ist, soll er das Programm abbrechen.

Das Ergebnis von meinem Snippet ist immer die Groesse des aktuellen Verzeichnisses, welche das script dann auf dem screen ausgibt(eine Zahl).Die 512 davor und das minus werden ignorirert.

mfg benny

Re: 512 - ''grosese aktulles Verzeichniss" geht nicht?

Verfasst: Mittwoch 25. Oktober 2006, 17:17
von BlackJack
bennym hat geschrieben:

Code: Alles auswählen

import os
512 - int(os.system("du -s|awk {'print $1'}"))

Warum kommt nicht das Ergebniss von 512 - ''grosese aktulles Verzeichniss" raus?
Weil `os.system()` den Rückgabewert des Programms liefert und nicht dessen Bildschirmausgabe, die landet auf dem Bildschirm, darum siehst Du die dort auch.

Das Du von der 512 nichts siehst, liegt daran das Du nichts ausgibst. Wenn Du einfach so ``42`` in Dein Skript schreibst, wird das ja auch nicht ausgegeben, sondern erst wenn Du ein ``print`` davor setzt.

Wenn Du das tust, dann wird nach der Verzeichnisgrösse wahrscheinlich eine 512 ausgegeben weil der Rückgabewert eines Programms per Konvention 0 ist, falls keine Fehler aufgetreten sind.

Wenn Du die Ausgabe eines Programms haben möchtest, dann schau mal in das `subprocess` Modul.

Aber ich würde lieber `os.walk()` und `os.path.getsize()` benutzen, dann bist Du nicht darauf angewiesen, dass ``du`` und ``awk`` auf dem System vorhanden sind.

Re: 512 - ''grosese aktulles Verzeichniss" geht nicht?

Verfasst: Mittwoch 25. Oktober 2006, 17:34
von Rebecca
BlackJack hat geschrieben:Aber ich würde lieber `os.walk()` und `os.path.getsize()` benutzen, dann bist Du nicht darauf angewiesen, dass ``du`` und ``awk`` auf dem System vorhanden sind.
...das habe ich in Bennyms anderem Thread auch vorgeschlagen und sogar implementiert. :roll:

Mal so aus Interesse: Ich kenne mich mit awk nicht wirklich aus, aber ist | awk {print $1'} nicht ueberfluessig?

Ich hasse Firefox...

Verfasst: Mittwoch 25. Oktober 2006, 17:54
von bennym
Mal so aus Interesse: Ich kenne mich mit awk nicht wirklich aus, aber ist | awk {print $1'} nicht ueberfluessig?
Nein ist es nicht, weil manchmal noch eine pfadangabe/bzw. ein . auf du -s folgt und es dann kein Zahl ausspuckt.

mfg benny

Verfasst: Mittwoch 25. Oktober 2006, 18:16
von bennym
Vielen Dank an alle !!!
..das habe ich in Bennyms anderem Thread auch vorgeschlagen und sogar implementiert. Rolling Eyes
Besonders an Rebecca! Irgendwie hat thunderbird die benchrichtigungsmail beim alten Thread in den junk geworfen.

mfg benny

Verfasst: Donnerstag 26. Oktober 2006, 21:00
von birkenfeld
Die Ausgabe eines Befehls kann man ohne großes Überlegen mit commands.getoutput bekommen.