it-swarm.com.de

Wie kann ich Dateinamen mit Leerzeichen als Argumente übergeben?

Ich habe ein Python-Skript, das Zeichenfolgenargumente akzeptiert.

$ python script.py "one image.jpg" "another image.jpg"

Das funktioniert wie erwartet.

Python-Argument: ["one image.jpg", "another image.jpg"]


Wenn ich Dateinamen übergeben muss, würde ich tun,

$ python script.py $(ls "/some/dir/*.jpg")

Python-Argument: ["one", "image.jpg", "another", "image.jpg"]

Wenn Sie den Befehl -Q of ls verwenden, kann ich die Ergebnisse in doppelte Anführungszeichen setzen. Anführungszeichen bleiben jedoch in Python-Skripten geschützt, d. H.

$ python script.py $(ls -Q "/some/dir/*.jpg")

Python-Argument: ['"one image.jpg"', '"another image.jpg"']


Wie soll ich ls Dateinamen in richtige Zeichenfolgen umwandeln, um sie als Argumente zu verwenden? (wie in meinem ersten Beispiel)

11
autorun

Analysieren Sie nicht ls. Benutz einfach:

python script.py /path/to/*.jpg

Dadurch wird ein Shell-Globbing ausgeführt, bei dem /path/to/*.jpg durch die richtige Liste ersetzt wird.

23
DopeGhoti

Ich denke, die globale Antwort oben ist am besten, aber xargs und find ist auch eine Lösung, die manchmal verwendet werden kann.

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

Dies funktioniert, weil -print0 in find die Ausgabe durch Null-Bytes und nicht durch Leerzeichen trennt und -0 in der xargs-Befehlszeile davon ausgeht, dass die Eingabe durch Null-Bytes getrennt ist.

5
davidsheldon