Una possibile soluzione hacker potrebbe essere quella di utilizzare eval
e lascia che bash esegua una stringa.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Usa il glob
module e forse subprocess
invece di !
. Un semplice glob.glob("path/*.jpg")
ti permetterà di iterare su tutte le immagini.
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
non è mai una buona idea - il comando potrebbe fallire silenziosamente.
Il !
indica semplicemente che il seguente codice verrà eseguito nel terminale.
Quindi un'opzione è solo quella di codificare la tua dichiarazione in bash. Non è così facile come Python, ma puoi eseguire lo stesso compito in questo modo:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
È un ciclo for, ma non un ciclo for di Python.
In alternativa, considera di tornare al codice sorgente di process.py
e modificandolo in modo che scorra i file in una directory. Questo può essere fatto abbastanza facilmente con il os.listdir
funzione.
Non c'è bisogno di sottoprocessi o formati. Qualcosa di semplice come:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
funziona per me.