Seite 1 von 1
os-system
Verfasst: Dienstag 27. September 2011, 09:36
von bluelagoon
Hallo,
ich hab ne Frage generell. ich möchte mit os.system einen Befehl von der Konsole auslösen die Ausgabe in einer Text-Datei schreiben ( mehrere Befehle eig und verschiedene Dateien) und ich möchte die dann Splitten und in eine neue Text-Datei erfassen.
Das ganze brauche ich weil es auf Windows die Datei $bitmaps gibt und unter Linux nicht finde (vll gibts die auch nicht ich weis es nicht) jedenfalls is meine Frage generell kann man das so umsetzen? Danke
okay hab nun
os.system("fdisk -s /dev/sd*")
os.system("dumpe2fs /dev/sda2 >file.txt")
und das funktioniert auch.

das Problem ist allerdings wie sage ich das er die komplette Festplatte durch dumpe2fs durchlaufen soll und alles ausgeben soll?
Re: os-system
Verfasst: Dienstag 27. September 2011, 09:53
von BlackJack
@bluelagoon: Und jetzt bitte noch einmal so erklären, dass man es auch versteht.

Re: os-system
Verfasst: Dienstag 27. September 2011, 09:59
von bluelagoon
ok warte also
ich weis nicht ob du das weisst, aber auf Windows gibts ne versteckte Datei die sich $bitmaps nennt. Was bitmaps sind weisst du warscheinlich, also ich möchte die Cluster der Festplatte bzw Partitionen sprich in der $bitmap steht z.b. 01011101 cluster0 heisst frei cluster 1 heisst belegt so ist der Aufbau der $bitmap.
Gibts so ne Datei unter Linux? ich hab mit dumpe2fs /dev/sda2 herausgefunden das man damit die Superblocks angezeigt bekommt und die einzelnen Sachen die dazu gehören. Nun möchte ich falls es die Datei nicht gibt die selbst basteln sprich mit dem Befehl in ne Text-Datei schreiben. Mein einziges Problem ist gerade bei dumpe2fs das er sagt wenn ich angeb /dev/sd* dumpe2fs: Bad magic number in super-block beim Versuch, /dev/sda1 zu öffnen
Die Ausgabe von dumpe2fs pack ich in eine Text-Datei und lies diese aus und erstell damit die Datei die ich brauch. (Hole nur paar Zeilen heraus). Das ist mein Problem gerade

Re: os-system
Verfasst: Dienstag 27. September 2011, 10:40
von bluelagoon
so ich bin nun ziemlich weit gekommen nun verlässt mich mein Wissen

also die Datei hat ja ewig viele Zeilen und ich möchte nur Freie Blöcke: 131074-131075, 131078-131088, 131090-131092, 131123-131124, 131126-131135usw und freie inodes Freie Inodes: 16328-24480 (Nur ein Beispiel)
jetzt hab ich das so aufgebaut moment:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import os
os.system("dumpe2fs /dev/sda3 >file.txt")
file = open("file.txt", 'r')
for line in file.readlines():
if line.startswith("Freie Blöcke:"):
print line
datei = open("bitmap.txt", "w")
datei.writelines(line)
datei.close()
Wenn ich statt dem irgendwas anderes eingib von den Zeilen wird es automatisch hinzugefügt. aber wenn ich freie Blöcke haben will ändert sich dort nichts :/ Ich hoffe das ihr mir nun besser helfen könnt den Rest hab ich selbst ganz gut erledigt

okay Fehler gefunden wegen Leerzeichen.
Re: os-system
Verfasst: Dienstag 27. September 2011, 10:43
von BlackJack
@bluelagoon: So eine Datei gibt es unter Linux nicht. Es gibt ja auch eine ganze Reihe von verschiedenen Dateisystemen, die ihre Daten alle etwas anders auf der Platte organisieren. Es gibt solche die eine Bitmap mit belegten und freien Blöcken führen, aber auch welche die das nicht tun, wo man so etwas erst aus anderen Datenstrukturen errechnen müsste.
Ist ``/dev/sda2`` bei dem System denn überhaupt ein ext2-Dateissystem, oder ein Nachfolger von dem Format? Falls nicht, kann man da natürlich auch nicht mit ``dumpe2fs`` heran gehen. Die zweite Partition ist bei Linux zum Beispiel nicht selten eine Swap-Partition.
`os.system()` sollte man übrigens nicht verwenden. Beim `subprocess`-Modul kann man sich auch dem Umweg über Dateien sparen und die Ausgabe von extern aufgerufenen Programmen direkt verarbeiten.
Python-Quelltext bitte in Python-Code-Tag setzen, sonst kann man den nicht vernünftig lesen.
Re: os-system
Verfasst: Dienstag 27. September 2011, 10:51
von bluelagoon
naja ich hab nur ein kleines Problem noch entdeckt ich will zeilenweise schreiben:
Code: Alles auswählen
datei = open("bitmap.txt", "w")
for line in file.writelines():
datei.write(line)
datei.close()
Fehlermeldung:
Traceback (most recent call last):
File "dp_bitmap.py", line 11, in <module>
for line in file.writelines():
TypeError: writelines() takes exactly one argument (0 given)
ok dann werd ich das mit dem os.system ändern danke

ach Fehler gefunden ich bin heut so blind statt w einfach a xD
Re: os-system
Verfasst: Dienstag 27. September 2011, 11:00
von BlackJack
@bluelagoon: Die Fehlermeldung sagt es doch sehr deutlich wo das Problem ist. `file.writelines()` erwartet ein Argument und bekommt keines. Da schaut man jetzt in der Dokumentation nach was die Methode tut und was sie als Argument erwartet.
Ausserdem solltest Du Dich über die Semantik des 'w'-Modus beim öffnen von Dateien informieren. Steht ebenfalls in der Dokumentation.
Re: os-system
Verfasst: Mittwoch 28. September 2011, 04:50
von bluelagoon
jo habs selber gesehn das es am append liegt denn write überschreibt ja jedes mal mehr hab ich net gebraucht

trotzdem Danke.
UND ich finde meine Fehler selbst auch wenn ich manchmal blind bin und dann etwas brauch bis ichs check

Re: os-system
Verfasst: Mittwoch 28. September 2011, 12:56
von JonasR
Code: Alles auswählen
datei = open("bitmap.txt", "w")
for line in file.writelines():
datei.write(line)
datei.close()
Dein Fehler war das du mit der "for" Schleife versuchst über file.writelines zu laufen

Du meintes wohl readlines.
Außerdem wenn du BlackJacks Vorschlag os.system beiseite zu legen und statt dessen subprocess.Popen benutzt brauchst du die Datei gar nicht mehr.
Wenn du es vermeiden kannst solltest du nie auf die Festplatte schreiben. Das ist nur unnötig langsam.