Eu tenho um script Python que aceita argumentos de seqüência de caracteres.
$ python script.py "one image.jpg" "another image.jpg"
Isso funciona conforme o esperado.
Argparse do Python: ["one image.jpg", "another image.jpg"]
Se eu precisar passar nomes de arquivos, eu faria,
$ python script.py $(ls "/some/dir/*.jpg")
Argparse do Python: ["one", "image.jpg", "another", "image.jpg"]
Se usar o comando -Q
of ls
, posso agrupar os resultados entre aspas duplas. No entanto, as aspas permanecem escapadas no script Python, ie.
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argparse do Python: ['"one image.jpg"', '"another image.jpg"']
Como devo expandir os ls
nomes de arquivos em strings apropriadas para usar como argumentos? (como no meu primeiro exemplo)
command-line
bash
python
autorun
fonte
fonte
"$(ls -Q '/some/dir/*.jpg')"
. No entanto, existem alternativas melhores, conforme indicado pelas respostas.Respostas:
Não analise
ls
. Apenas use:Isso realiza a ocultação de shell que é substituída
/path/to/*.jpg
pela lista apropriada.fonte
Acho que a resposta glob acima é melhor, mas
xargs
efind
também é uma solução que pode ser utilizada, por vezes.Isso funciona porque
-print0
onfind
separará a saída com bytes nulos, em vez de espaços, e a-0
linha de comando xargs assumirá que a entrada é separada por bytes nulos.fonte