Liste mit Dateinamen (ls *.ext)

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.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Beitragvon whaeva » Donnerstag 7. Mai 2009, 10:23

Gehört nicht direkt zur Fragestellung, aber:
Einem Skript möchte ich als Argument Dateien mit Wildcard verklickern, z.B.:
[code=]script.py *.ext[/code]
Dann wäre es ein Leichtes, mit glob(argv[1]) die Liste zu bekommen.

Leider passiert in meiner Shell aber folgendes nicht:
[code=]argv[1] >> '*.ext'
argv[1] >> 'file1.ext file2.ext ...'[/code]
sondern
[code=]argv[1] >> 'file1.ext'[/code]

Was genau passiert da und wie vermeidet man es?
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 7. Mai 2009, 10:39

*.ext wird zunächst von deiner Shell bearbeitet und damit natürlich durch die entsprechenden Dateien ersetzt. Versuch einfach mal:

Code: Alles auswählen

script.py "*.ext"
Das Leben ist wie ein Tennisball.
lunar

Beitragvon lunar » Donnerstag 7. Mai 2009, 10:48

Das ist doch unsinnig. Zum einen dupliziert man damit die Arbeit der Shell, zumal diverse Shells wie die zsh weitaus mächtigere Globbing-Features bereitstellen als die "glob()" -Funktion. Zum anderen erschwert man das Escaping: Angenommen, der Nutzer hat eine Datei mit einem Sternchen im Namen. Ruft man "glob()" nochmals manuell auf, muss der Nutzer zweimal Escapen, das erste Mal, um die Shell am Globbing zu hindern, das zweite Mal, um das Programm daran zu hindern.

"glob()" manuell aufzurufen, führt nur zu für den Benutzer unerwarteten Effekten. Anstatt manuell zu globben und der Shell damit ins Handwerk zu pfuschen, sollte man sie einfach ihre Arbeit tun lassen und einfach mit mit der sys.argv()-Liste arbeiten.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Beitragvon whaeva » Donnerstag 7. Mai 2009, 11:11

Danke, habe mein Problem erkannt:
* wird von der Shell zu "file1 file2 file3" umgebaut - argv >> ['file1', 'file2' ,'file3']
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Donnerstag 7. Mai 2009, 12:51

Hyperion hat geschrieben:

Code: Alles auswählen

rm -r /home/irgendwas/nochwas/ *

Oh ja... :roll:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 7. Mai 2009, 14:43

whaeva hat geschrieben:Danke, habe mein Problem erkannt:
* wird von der Shell zu "file1 file2 file3" umgebaut - argv >> ['file1', 'file2' ,'file3']

Nicht jede Shell. Bei DOS und ich denke auch dass es in Windows so ist, müssen die Programme selbst 'glob'ben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]