Možným hackerským řešením by mohlo být použití eval
a nechat bash spustit řetězec.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Použijte glob
modul a možná subprocess
místo !
. Jednoduchý glob.glob("path/*.jpg")
vám umožní opakovat všechny obrázky.
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)
Pomocí !
nebo eval
není nikdy dobrý nápad – příkaz může tiše selhat.
!
jednoduše označuje, že následující kód bude spuštěn v terminálu.
Jednou z možností je tedy pouze kódovat váš příkaz v bash. Není to tak snadné jako Python, ale můžete provést stejný úkol, jako je tento:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
Je to smyčka for, ale ne smyčka for Python.
Případně zvažte návrat ke zdrojovému kódu process.py
a upravit jej tak, aby procházel soubory v adresáři. To lze snadno provést pomocí os.listdir
funkce.
Není potřeba podproces nebo formát. Něco tak jednoduchého jako:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
funguje pro mě.