Tengo un script de Python que acepta argumentos de cadena.
$ python script.py "one image.jpg" "another image.jpg"
Esto funciona como se esperaba.
Argumento de Python: ["one image.jpg", "another image.jpg"]
Si necesito pasar nombres de archivo, lo haría,
$ python script.py $(ls "/some/dir/*.jpg")
Argumento de Python: ["one", "image.jpg", "another", "image.jpg"]
Si uso el comando -Q
of ls
, puedo ajustar los resultados entre comillas dobles. Sin embargo, las citas se escapan en el script de Python, es decir.
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argumento de Python: ['"one image.jpg"', '"another image.jpg"']
¿Cómo debo expandir los ls
nombres de archivo en cadenas adecuadas para usar como argumentos? (como en mi primer ejemplo)
command-line
bash
python
ejecución automática
fuente
fuente
"$(ls -Q '/some/dir/*.jpg')"
. Sin embargo, hay mejores alternativas como se indica en las respuestas.Respuestas:
No analizar
ls
. Solo usa:Esto lleva a cabo el bloqueo de shell que reemplaza
/path/to/*.jpg
por la lista adecuada.fuente
Creo que la respuesta pegote anterior es mejor, pero
xargs
yfind
también es una solución que se puede utilizar a veces.Esto funciona porque
-print0
onfind
separará la salida con bytes nulos en lugar de espacios, y-0
en la línea de comando xargs asumirá que la entrada está separada por bytes nulos.fuente