Eine mögliche hackige Lösung könnte darin bestehen, eval
zu verwenden und lassen Sie bash einen String ausführen.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Verwenden Sie die glob
Modul und vielleicht subprocess
statt !
. Eine einfache glob.glob("path/*.jpg")
lässt Sie über alle Bilder iterieren.
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)
Mit !
oder eval
ist nie eine gute Idee - der Befehl kann stillschweigend fehlschlagen.
Die !
gibt einfach an, dass der folgende Code im Terminal ausgeführt wird.
Eine Möglichkeit besteht also darin, Ihre Anweisung einfach in Bash zu codieren. Es ist nicht ganz so einfach wie Python, aber Sie können die gleiche Aufgabe wie folgt erledigen:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
Es ist eine For-Schleife, aber keine Python-For-Schleife.
Alternativ können Sie auch zum Quellcode von process.py
zurückkehren und es so zu modifizieren, dass es die Dateien in einem Verzeichnis durchläuft. Das geht ganz einfach mit dem os.listdir
Funktion.
Kein Unterprozess oder Format erforderlich. Etwas so Einfaches wie:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
funktioniert für mich.