Una posible solución pirateada podría ser usar eval
y deja que bash ejecute una cadena.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Usa el glob
módulo y tal vez subprocess
en lugar de !
. Un simple glob.glob("path/*.jpg")
te permitirá iterar sobre todas las imágenes.
from glob import glob
from subprocess import check_call
for i in glob("/Users/images/*.jpg"):
print("Processing:", i)
check_call(["python", "process.py", "--filename", i], shell=False)
Usando !
o eval
nunca es una buena idea:el comando puede fallar silenciosamente.
El !
simplemente indica que se ejecutará el siguiente código en la terminal.
Entonces, una opción es simplemente codificar su declaración en bash. No es tan fácil como Python, pero puedes realizar la misma tarea así:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
Es un bucle for, pero no un bucle for de Python.
Alternativamente, considere volver al código fuente de process.py
y modificarlo para que recorra los archivos en un directorio. Esto se puede hacer fácilmente con el os.listdir
función.
No hay necesidad de subproceso o formato. Algo tan simple como:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
funciona para mí.