Seite 1 von 1
Frage zu re und Stringmanipulationen
Verfasst: Samstag 9. Januar 2010, 20:02
von schwedenmann
Hallo
Folgender code
Code: Alles auswählen
befehl = "wodim --devices"
print befehl
process = subprocess.Popen(befehl , shell=True, stdout=subprocess.PIPE)
f = process.stdout.read()
print f
print len(f)
result = re.search ( r"dev='/dev/...'" , f )
print result.group ( 0 )
liefert das zurück
wodim --devices
wodim: Overview of accessible drives (2 found) :
-------------------------------------------------------------------------
0 dev='/dev/hdc' rwrw-- : 'TOSHIBA' 'DVD-ROM SD-M1912'
1 dev='/dev/hdd' rwrw-- : 'HL-DT-ST' 'DVDRAM GSA-4163B'
-------------------------------------------------------------------------
Gibt es eine Möglichkeit nur die 2. + 3. Zeile zu bearbeiten.
Ich möchte am Ende folgendes erhalten
dev='/dev/hdc' DVD-ROM
oder
dev='/dev/hdd' 'DVDRAM
je nach Abfrage
Kann man das per re oder find realisieren.
Mir würde es ausreichen, nur die beiden Zeilen mirt den dev= Einträgen bearbeiten zu können, dann kan ich die mit re.search bearbeiten und mir die groups ausgeben lassen.
mfg
schwedenmann
Verfasst: Samstag 9. Januar 2010, 21:43
von Dauerbaustelle
Code: Alles auswählen
In [63]: a = """wodim: Overview [...] ------"""
In [64]: for line in a.split('\n'):
....: x = re.findall("'(.+?)'", line)
....: if x: x[0], x[2]
....:
....:
Out[65]: ('/dev/hdc', 'DVD-ROM SD-M1912')
Out[65]: ('/dev/hdd', 'DVDRAM GSA-4163B')
Re: Frage zu re und Stringmanipulationen
Verfasst: Sonntag 10. Januar 2010, 05:54
von Hyperion
Code: Alles auswählen
# befehl = "wodim --devices"
# besser:
befehl = ["wodim", "--devices"]
Wobei es schon wundert, dass man nach 24 Postings noch keine Ahnung von Code-Tags hat

Verfasst: Sonntag 10. Januar 2010, 12:12
von sma
Wenn du die 2. und 3. Zeile deiner Ausgabe haben willst, und diese z.B. im String "s" steht, benutze
Da dieses aber die Zeilen "wodim: Overview..." und die erste Zeile mit den "----" wären, glaube ich, dass du irgendwie anders zählst als ich. Wahrscheinlich willst du also die Zeilen zwischen den "----" haben.
Code: Alles auswählen
import re
scan = False
for line in s.splitlines():
if re.match("-+", line):
scan = not scan
elif scan:
print re.findall(r"dev='([^']*?)'[^']*?'[^']*?' '(\S*)", line)
Stefan
Verfasst: Sonntag 10. Januar 2010, 15:09
von Dauerbaustelle
`str.splitlines` kannte ich jetzt auch noch nicht oO
Verfasst: Montag 11. Januar 2010, 12:15
von noisefloor
Hallo,
willst du _wirklich_ nur die 2.+3. Zeile? Das macht das Skript unflexibel, weil es dann ggf. nicht passt, wenn es nur einen bzw. 3+ Treffer gibt.
IMHO solltes es passen, wenn du auf den Ausdruck "Zahl-leer-dev=" matchst.
Gruß, noisefloor
re
Verfasst: Mittwoch 13. Januar 2010, 14:18
von schwedenmann
Hallo
willst du _wirklich_ nur die 2.+3. Zeile? Das macht das Skript unflexibel, weil es dann ggf. nicht passt, wenn es nur einen bzw. 3+ Treffer gibt.
Das sollte ausreichen, mehr als 2 DVD/CD-Laufwerke hat doch wohl keiner in einem normalen PC verbaut, oder doch?
Ich möchte das Ganze ev. später in einem kleinen pythonprtogramm zur Erstellung und zum brenne nur von ISO-Dateien unter Linux verwenden.
Die obigen Zeilen, kann ich dann verwenden, um die devices mit wodim automatsich erkennen zu lassen und dann in eine config zu schreiben.
mfg
schwedenmann
Re: re
Verfasst: Mittwoch 13. Januar 2010, 14:26
von cofi
schwedenmann hat geschrieben:Das sollte ausreichen, mehr als 2 DVD/CD-Laufwerke hat doch wohl keiner in einem normalen PC verbaut, oder doch?
Wir werden immer noch von den Einschraenkungen der PC-Pionierzeit heimgesucht, da man damals dachte, dass es fuer alle Zeiten genug ist. Ich waere mit solchen Mutmassungen vorsichtig, v.a. da es relativ einfach ist das auf beliebig viele Zeilen auszudehnen.
Re: re
Verfasst: Mittwoch 13. Januar 2010, 14:42
von Dauerbaustelle
schwedenmann hat geschrieben:Das sollte ausreichen, mehr als 2 DVD/CD-Laufwerke hat doch wohl keiner in einem normalen PC verbaut, oder doch?
Und wenn doch, dann ist dein Programm für denjenigen unnütz :-)
Verfasst: Mittwoch 13. Januar 2010, 15:19
von noisefloor
Hallo,
Das sollte ausreichen, mehr als 2 DVD/CD-Laufwerke hat doch wohl keiner in einem normalen PC verbaut, oder doch?
Eher nicht - aber darum geht es ja gar nicht.
Der Kern der Aussage war eher: Warum unnötig unflexibel machen, wenn es mit minimal Mehraufwand auch universell geht?
Oder um es anders auszudrücken:
Dauerbaustelle hat geschrieben:
Und wenn doch, dann ist dein Programm für denjenigen unnütz

Gruß, noisefloor
Re: re
Verfasst: Mittwoch 13. Januar 2010, 15:23
von Leonidas
schwedenmann hat geschrieben:Das sollte ausreichen, mehr als 2 DVD/CD-Laufwerke hat doch wohl keiner in einem normalen PC verbaut, oder doch?
Wenige, aber auf Windows gibt es Software wie Daemon Tools die ganz viele Laufwerke emulieren kann. Daher würde ich meine Software nicht so einschränken.
DVD-Laufwerke
Verfasst: Mittwoch 13. Januar 2010, 17:40
von schwedenmann
Hallo
ich weiß worauf ihr hinaus wollt (universeller, ist egal ob 2 oder meher Zeilen auswerten). dann mach ich das anders, anstatt nur die 2 zeilen mir rauszupicken, nimm ich:
a. die zeile mit DVDRAM für den Brenner mit den deviceangaben am Anfang und
b. die Zeile mit DVD-ROM fürs Leselaufwerk
alle anderen DVD-Laufwerke werden dann ignoriert, da für das Brennen und erzeugen von Iso von DVD-Laufwerk, sowieso nur 2 devices benötigt werden.
@leonidas, das ganze ist nur ne Übung für mich und soll nur unter Linux funktionieren. wodim --devices liest nur die hardwaremäßig verbauten Laufwerke aus, ich könnte auch die dmsg auswerten,
P.S.
Mit welchen Programmen brennen denn nero und Konsorten unter Win? Für cd benutzen enige cdrecord mit cgwin, aber nero?
mfg
schwedenmann
Verfasst: Mittwoch 13. Januar 2010, 17:58
von cofi
Nero ist ein kommerzielles Programm, da ist die Antwort recht einfach: Selbst geschrieben.
Verfasst: Mittwoch 13. Januar 2010, 23:24
von Leonidas
cofi hat geschrieben:Nero ist ein kommerzielles Programm, da ist die Antwort recht einfach: Selbst geschrieben.
Das stimmt, aber die beiden Aussagen sind dennoch nicht korelliert

Verfasst: Donnerstag 14. Januar 2010, 00:04
von cofi
Hmm ich weiss nicht, zieht man z.B. in Betracht, wie alt Nero ist, koennte das durchaus der Fall sein.
Ich bin nicht im kommerziellen Umfeld taetig, aber ich koennte mir durchaus vorstellen, dass die an die Kernsoftware Hand anlegen (wollen), insofern waere das ja immernoch richtig, wenn sie die entsprechenden Libs eingekauft haetten oder freie benutzen
