Une solution hackish possible pourrait être d'utiliser eval
et laissez bash exécuter une chaîne.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Utilisez le glob
module et peut-être subprocess
au lieu de !
. Un simple glob.glob("path/*.jpg")
vous permettra de parcourir toutes les images.
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)
Utilisation de !
ou eval
n'est jamais une bonne idée - la commande peut échouer silencieusement.
Le !
indique simplement que le code suivant sera exécuté dans le terminal.
Donc, une option consiste simplement à coder votre déclaration en bash. Ce n'est pas aussi simple que Python, mais vous pouvez accomplir la même tâche comme ceci :
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
C'est une boucle for, mais pas une boucle for Python.
Vous pouvez également envisager de revenir au code source de process.py
et le modifier pour qu'il parcoure les fichiers d'un répertoire. Cela peut être fait assez facilement avec le os.listdir
fonction.
Pas besoin de sous-processus ou de format. Quelque chose d'aussi simple que :
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
fonctionne pour moi.