Shell Befehl in Python implementieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

Dienstag 19. April 2005, 13:23

Hallo allerseits,
ich bin neu in python und würde gerne wissen wie man zum beispiel den shell befehl find in python implementiert...

ich glaube man muss das modul os importieren oder?

aber wie kann ich zum beispiel den befehl find "irgendwas -name " dann implementieren?

Danke euch!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 19. April 2005, 13:59

Öhm ja, du brauchst os.path, os.walk, optparse und musst dann die Funktionalität bereitstellen. Also durch alle möglichen Ordner durchgehen und nach dieser Datei suchen.

Die Antwort ist etwas ungenau, aber deine Frage ist es auch.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 19. April 2005, 16:21

Um den Linux-Befehl "find" zu verwenden nimm popen oder subprocess... Beispiele sind im Forum zu finden...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Freitag 22. April 2005, 09:14

Hallo,
mit os.system('find . -name "*.html"')
kommt die ausgabe...

allerdings würde ich gerne alle html files in eine liste speichern...nur geht das nicht mit
html_list = os.system('find . -name "*.html"')

jemand eine Idee?
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Freitag 22. April 2005, 09:47

Code: Alles auswählen

>>> import os
>>> alle_dateien = os.listdir(os.getcwd())
>>> print alle_dateien
['pybrowser.py', 'todo11.pyc', 'tkdu-1.4.py', 'dateimanager.py', 'fuplo.py', ... ]
os.getcwd() = Das Verzeichnis aus dem das Programm gestartet wurde.
Mit os.path.splitext() kommst du an die Dateiendung heran:

Code: Alles auswählen

>>> import os
>>> os.path.splitext("/Verzeichnis/Datei.Endung")
('/Verzeichnis/Datei', '.Endung')
Jetzt kannst du eine Schleife über "alle_dateien" laufen lassen und mit "splitext()" dir die gewünschten .html Dateien heraussuchen.

cu Sebastian

Edit: Habe überlesen, dass du nicht nur im aktuellen Verzeichnis suchen möchtest. :-(
Da ist os.walk wie Leonidas sagte richtig.
Gast

Freitag 22. April 2005, 12:04

Vielen dank...das funktioniert !

würde gerne auf dem html file einen grep befehl ausführen lassen...also mit os.system('grep muster datei')

allerdings muss ich hier die datei rein schreiben ...wenn ich aber die laufvariable der for schleife (also die einzelnen html files) reinschreibe sagt mir der interpretre er kennt die datei nicht....

gibt es dafür eine Lösung?
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 22. April 2005, 12:34

Poste mal deinen Code....

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Freitag 22. April 2005, 12:36

Code: Alles auswählen

for file in all_files:

        test_fl = os.path.splitext(path+"/"+file)
        if test_fl[1] != ".html":
                continue
        else: 
                sec_labels_lst = os.system('grep wickedlabel file') # hier kann der grep nicht funktionieren weil file ja die laufvariable ist....
                print sec_labels_lst


Edit (Leonidas): Code in Python Tags gesetzt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 22. April 2005, 12:42

Geht's so?

Code: Alles auswählen

for file in all_files:
    if os.path.splitext( test_fl )[1] != ".html":
        continue

    test_fl = os.path.join( path, file )

    commando = 'grep wickedlabel %s' % test_fl
    
    sec_labels_lst = os.system( commando )
    print sec_labels_lst

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Freitag 22. April 2005, 12:48

öha...
danke!

es geht........man sieht ich muss noch vieeeel lernen.

Super danke!
Antworten