Não analise ls
. Apenas use:
python script.py /path/to/*.jpg
Isso realiza a globalização shell, que substitui /path/to/*.jpg
pela lista correta.
Eu tenho um script Python que aceita argumentos de string.
$ python script.py "one image.jpg" "another image.jpg"
Isso funciona como esperado.
Argumento Python: ["one image.jpg", "another image.jpg"]
Se eu precisar passar nomes de arquivos, eu faria
$ python script.py $(ls "/some/dir/*.jpg")
Argumento Python: ["one", "image.jpg", "another", "image.jpg"]
Se você usar o comando -Q
de ls
, posso encapsular os resultados entre aspas duplas. No entanto, aspas ficam com escape no script Python, ou seja,
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argumento Python: ['"one image.jpg"', '"another image.jpg"']
Como devo expandir ls
nomes de arquivos em seqüências adequadas para usar como argumentos? (como no meu primeiro exemplo)
Não analise ls
. Apenas use:
python script.py /path/to/*.jpg
Isso realiza a globalização shell, que substitui /path/to/*.jpg
pela lista correta.
Acho que a resposta da glob acima é melhor, mas xargs
e find
também é uma solução que pode ser usada às vezes.
find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py
Isso funciona porque -print0
on find
separará a saída com bytes nulos em vez de espaços, e o -0
na linha de comando xargs assumirá que a entrada está separada por bytes nulos.
Tags command-line bash python