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

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ö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 (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

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

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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Poste mal deinen Code....

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

öha...
danke!

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

Super danke!
Antworten