J'ai un script Python qui accepte les arguments de chaîne.
$ python script.py "one image.jpg" "another image.jpg"
Cela fonctionne comme prévu.
Argparse Python: ["one image.jpg", "another image.jpg"]
Si je dois transmettre des noms de fichiers, je le ferais,
$ python script.py $(ls "/some/dir/*.jpg")
Argparse Python: ["one", "image.jpg", "another", "image.jpg"]
Si vous utilisez la commande -Q
of ls
, je peux encapsuler les résultats entre guillemets doubles. Cependant, les citations restent échappées dans le script Python, c'est-à-dire.
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argparse Python: ['"one image.jpg"', '"another image.jpg"']
Comment dois-je développer les ls
noms de fichiers en chaînes appropriées à utiliser comme arguments? (comme dans mon tout premier exemple)
command-line
bash
python
autorun
la source
la source
"$(ls -Q '/some/dir/*.jpg')"
. Cependant, il existe de meilleures alternatives comme indiqué dans les réponses.Réponses:
Ne pas analyser
ls
. Utilisez simplement:Cela effectue un globbing shell qui remplace
/path/to/*.jpg
par la liste appropriée.la source
Je pense que la réponse est au- dessus de glob mieux, mais
xargs
etfind
est aussi une solution qui peut être utilisé parfois.Cela fonctionne car
-print0
onfind
séparera la sortie avec des octets nuls plutôt qu'avec des espaces, et la-0
ligne de commande xargs supposera que l'entrée est séparée par des octets nuls.la source